我想为Event
索引视图做一个演示者,它目前遍历所有事件,如下所示:
<% @events each do |event| %>
<td><%= link_to event.name, event_path(event) %></td>
<% end %>
里面还有很多其他的东西,但这是它的要点。我希望能够做类似的事情:
<% present @events do |event_presenter| %>
<td><%= event_presenter.event_title %></td>
<% end %>
将EventPresenter
是 的子类BasePresenter
,取自Railscast 287
class BasePresenter
def initialize(object, template)
@object = object
@template = template
end
private
def self.presents(name)
define_method(name) do
@object
end
end
def h
@template
end
def markdown(text)
Redcarpet.new(text, :hard_wrap, :filter_html, :autolink).to_html.html_safe
end
def method_missing(*args, &block)
@template.send(*args, &block)
end
end
让我感到困惑的是,在 Railscast 中,该示例用于显示操作,而不是索引操作。视图中没有迭代,例如@events each do |event|
. 您不能以这种方式将方法粘贴到演示者文件中:
def event_title
link_to event.name, event_path(event)
end