[RUBY] Présenter Rails Presenter

Présentez un présentateur

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.

L'assistant est-il rouge?

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("&#x2611;") : raw("&#x2610;") %>

Faire un présentateur sur le modèle

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

Modifier le modèle ERB

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("&#x2611;") : raw("&#x2610;") %>

Définir une méthode dans Presenter

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("&#x2611") : 
      view_context.raw("&#x2610")
  end
end

Réécrire le modèle ERB

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("&#x2611;") : raw("&#x2610;")

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

Présenter Rails Presenter
[Rails] Présentation de Carrierwave
Jusqu'à l'introduction des polices dans Rails
Comment installer jQuery dans Rails 6
[Rails g. Erreur]
Rails Examen 1
API Rails
Migration des rails
[Rails] first_or_initialize
À propos des rails 6
Fondation Rails
Mémorandum Rails
tutoriel sur les rails
rails tutry
tutoriel sur les rails
Préparation à l'introduction de jQuery dans Ruby on Rails
[Rails] concevoir
[Rails 5.x] Comment introduire des polices gratuites
rails tutry
tutoriel sur les rails
Conseils de rails
méthode des rails
tutoriel sur les rails
Rails Revue 2