【问题标题】:writing a presenter for index action为索引操作编写演示者
【发布时间】:2016-10-15 22:52:59
【问题描述】:

我想为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 %>

EventPresenterBasePresenter 的子类,取自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

【问题讨论】:

    标签: ruby-on-rails presenter


    【解决方案1】:

    我通常更手动地管理这件事,我发现这种方式更容易处理,并且当我需要更改某些内容或调试时,我可以准确地推断出正在发生的事情。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2012-02-11
      相关资源
      最近更新 更多