为索引动作撰写演示者

时间:2016-06-15 02:15:57

标签: ruby-on-rails presenter

我想为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的子类,取自SQOOP

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中,示例是show动作,而不是索引动作。视图中没有像@events each do |event|那样的迭代。您不能以这种方式将方法粘贴到演示文件中:

  def event_title
    link_to event.name, event_path(event)
  end

1 个答案:

答案 0 :(得分:1)

我通常手动管理这个东西,我发现更容易处理这种方式,并在我需要更改或调试时确切地说明发生了什么。

无论如何,我这样做的方式通常是在控制器中。

def index
  @events = Event.all.map(|event| EventPresenter.new(event))
end

然后在您的视图中,它们已经映射到您需要的内容。