Итак, я вижу код в приложении 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 %>
Что джо лесничий сказал правильно, это действительно экземпляр 'ActionView'. Я не могу найти раздел кода в источнике рельсов, который демонстрирует это, но к вашему второму вопросу модуль смешивается с представлением. Точнее, это 'include', который добавляет методы в модуль к экземпляру, поэтому' self' указывает на 'ActionView'. –