2016-04-28 4 views
0

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 %> 
+0

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. –

Antwort

0

korrigieren, ist es die aktuelle Ansicht Objekt selbst.

Ich habe eine Blog-Post auf PORO Moderatoren geschrieben, die ein wenig

http://joewoodward.me/i-take-it-back/

+1

Das Posten eines Links sollte nicht als Antwort betrachtet werden. Sie sollten einen Link als Kommentar zu der Frage hinzufügen oder eine Antwort auf SO selbst geben und bei Bedarf auf Ihren Blog verweisen. – RAJ

Verwandte Themen