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.
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("☑") : raw("☐") %>
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
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("☑") : raw("☐") %>
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("☑") :
view_context.raw("☐")
end
end
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("☑") : raw("☐")
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