Le présentateur est chargé d'affiner le code HTML de la logique dans la partie Vue. Le but est de rendre la partie de vue rafraîchissante. Les présentateurs sont également appelés décorateurs.
Il semble que Draper, Cells, etc. soient utilisés dans Gem, Nous allons l'implémenter sans utiliser Gem cette fois.
Il est naturel de la définir comme une méthode d'assistance car c'est une méthode utilisée dans la vue. Mais helper a ses avantages et ses inconvénients qui sont définis globalement. Au fur et à mesure que le projet se développe, le risque de conflits de noms augmente.
Cette fois, nous séparerons la partie logique incluse dans le code suivant. La logique de la liste criminelle. Si arrêté? Est-ce vrai, ajoutez ☑️ et Sinon, ce sera un blanc □.
<% @members.each do |m| %>
<%= m.arrested? ? raw("☑") : raw("☐") %>
Tout d'abord, créez la classe ModelPresenter, qui est l'ancêtre de tous les présentateurs. L'objet d'appel uniquement et les attributs view_context sont définis.
app/presenters/model_presenter.rb
class ModelPresenter
attr_reader :object, :view_context
def initialize(object, view_context)
@object = object
@view_context = view_context
end
end
Ensuite, créez une classe de présentateur Member en héritant de la classe model_presenter.
member_presenter.rb
class StaffMemberPresenter < ModelPresenter
end
Modifiez le modèle ERB à l'aide de cette classe. Créez une instance de la classe MemberPresenter.
Le premier argument de la nouvelle méthode est l'objet Member. La pseudo variable self est spécifiée dans le deuxième argument. self peut utiliser toutes les méthodes d'aide définies dans Rails.
<% @members.each do |m| %>
<% p = MemberPresenter.new(m, self) %>
<%= m.arrested? ? raw("☑") : raw("☐") %>
Ici, nous allons définir une méthode d'instance dans la classe MemberPresenter créée précédemment.
member_presenter.rb
class MemberPresenter < ModelPresenter
def arrested_mark
object.arrested? ?
view_context.raw("☑") :
view_context.raw("☐")
end
end
Rendre la partie de vue rafraîchissante en utilisant le présentateur jusqu'à présent
<% @members.each do |m| %>
<% p = MemberPresenter.new(m, self) %>
<%= p.arrested_mark %>
Le code suivant est intégré dans la pièce modifiée.
m.arrested? ? raw("☑") : raw("☐")
J'ai pu rafraîchir la vue comme ça. Je voudrais réécrire cet article car l'utilisation de délégué le rend un peu plus concis. C'est tout pour aujourd'hui.
Recommended Posts