So sehe ich Code in einer Rails 4.2 App wie folgt.Wird die Template-Variable in application_helper.rb in diesem Presenter von self initialisiert?
1) Welche Art von Objekt ist @template in kite_presenter.rb? Ist es eine Instanz von ActionView und hat es so Zugriff auf Helfer wie image_tag? 2) Wenn die Antwort auf 1 ist, dass es sich um eine Instanz von Actionview handelt, wie kann man in application_helper.rb auf ein ActionView-Objekt verweisen?
kite_presenter.rb
class KitePresenter < SimpleDelegator
def initialize(kite, template)
super(kite)
@template = template
end
def tail_display
h.image_tag("tail.png", class: 'gray')
end
end
application_helper.rb
module ApplicationHelper
def present(object, klass = nil)
klass ||= "#{object.class}Presenter".constantize
presenter = klass.new(object, self)
yield presenter if block_given?
presenter
end
end
some_html.erb
<% present(kite) do |kite_presenter| %>
<%= kite_presenter.tail_display %>
<% end %>
Was Joe Woodward sagte richtig ist, es ist in der Tat eine Instanz von 'ActionView' helfen sollen. Ich kann den Codeabschnitt in der Quelle "rails" nicht finden, der das demonstriert, aber zu Ihrer zweiten Frage wird das Modul mit der Ansicht gemischt. Um genau zu sein, ist es ein 'include', das die Methoden in dem Modul der Instanz hinzufügt, weshalb' self' auf 'ActionView' zeigt. –