2016-04-28 1 views
0

Итак, я вижу код в приложении Rails 4.2, как показано ниже.Является ли переменная шаблона инициализирована из self в application_helper.rb в этом ведущем?

1) Какой тип объекта @template в kite_presenter.rb? Является ли это экземпляром ActionView, и именно так он имеет доступ к помощникам, таким как image_tag? 2) Если ответ на 1 - это экземпляр Actionview, в application_helper.rb, как узнать себя для ссылки на объект ActionView?

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

Что джо лесничий сказал правильно, это действительно экземпляр 'ActionView'. Я не могу найти раздел кода в источнике рельсов, который демонстрирует это, но к вашему второму вопросу модуль смешивается с представлением. Точнее, это 'include', который добавляет методы в модуль к экземпляру, поэтому' self' указывает на 'ActionView'. –

ответ

0

Правильно, он сам по себе текущий объект вида.

Я написал сообщение в блоге на PORO докладчикам, которые должны помочь немного

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

+1

Публикация ссылки не должна рассматриваться как ответ. Вы должны добавить ссылку в качестве комментария к вопросу или предоставить ответ на СА, и при необходимости указать свой блог. – RAJ

Смежные вопросы