[RUBY] Stellen Sie Rails Presenter vor

Stellen Sie einen Moderator vor

Der Präsentator ist dafür verantwortlich, den HTML-Code der Logik im View-Teil zu verfeinern. Der Punkt ist, den Ansichtsteil zu aktualisieren. Moderatoren werden auch Dekorateure genannt.

Es scheint, dass Draper, Cells usw. in Gem verwendet werden, Wir werden es dieses Mal implementieren, ohne Gem zu verwenden.

Ist der Helfer rot?

Es ist natürlich, es als Hilfsmethode zu definieren, da es sich um eine in der Ansicht verwendete Methode handelt. Aber Helfer hat seine Vor- und Nachteile, die global definiert sind. Mit dem Wachstum des Projekts steigt das Risiko von Namenskonflikten.

Dieses Mal werden wir den im folgenden Code enthaltenen logischen Teil trennen. Die Logik der kriminellen Liste. Wenn verhaftet? Ist wahr, fügen Sie ☑️ und hinzu Wenn nicht, ist es leer □.

<% @members.each do |m| %>
  <%= m.arrested? ? raw("&#x2611;") : raw("&#x2610;") %>

Machen Sie einen Moderator über Model

Erstellen Sie zunächst die ModelPresenter-Klasse, die der Vorfahr aller Präsentatoren ist. Nur-Aufruf-Objekt- und view_context-Attribute werden definiert.

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

Erstellen Sie als Nächstes eine Member Presenter-Klasse, indem Sie die model_presenter-Klasse erben.

member_presenter.rb


class StaffMemberPresenter < ModelPresenter
end

ERB-Vorlage bearbeiten

Bearbeiten Sie die ERB-Vorlage mit dieser Klasse. Erstellen Sie eine Instanz der MemberPresenter-Klasse.

Das erste Argument der neuen Methode ist das Member-Objekt. Die Pseudovariable self wird im zweiten Argument angegeben. self kann alle in Rails definierten Hilfsmethoden verwenden.

<% @members.each do |m| %>
  <% p = MemberPresenter.new(m, self) %>
    <%= m.arrested? ? raw("&#x2611;") : raw("&#x2610;") %>

Definieren Sie eine Methode in Presenter

Hier definieren wir eine Instanzmethode in der zuvor erstellten MemberPresenter-Klasse.

member_presenter.rb


class MemberPresenter < ModelPresenter
  def arrested_mark
    object.arrested? ? 
      view_context.raw("&#x2611") : 
      view_context.raw("&#x2610")
  end
end

Schreiben Sie die ERB-Vorlage neu

Aktualisieren Sie den Ansichtsteil mithilfe des bisherigen Präsentators


<% @members.each do |m| %>
  <% p = MemberPresenter.new(m, self) %>
    <%= p.arrested_mark %>

Der folgende Code ist in den geänderten Teil eingebettet.

m.arrested? ? raw("&#x2611;") : raw("&#x2610;")

Ich konnte die Ansicht so aktualisieren. Ich würde diesen Artikel gerne noch einmal schreiben, weil die Verwendung von delegate ihn etwas prägnanter macht. Das ist alles für heute.

Recommended Posts

Stellen Sie Rails Presenter vor
[Rails] Carrierwave einführen
Bis zur Einführung von Schriftarten in Rails
So installieren Sie jQuery in Rails 6
[Schienen g. Fehler]
Rails Review 1
Rails API
Schienenmigration
[Rails] first_or_initialize
Über Schienen 6
Schienenfundament
Rails Memorandum
Schienen Tutorial
Schienen Tutry
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
Vorbereiten der Einführung von jQuery in Ruby on Rails
[Schienen] erfinden
[Rails 5.x] So führen Sie kostenlose Schriftarten ein
Schienen Tutry
Schienen Tutorial
Schienen Tipps
Schienenmethode
Schienen Tutorial
Rails Review 2