2016-06-15 48 views
0

一個主持人我想作一個演講的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 

回答

1

我一般比較手工管理這個東西,我覺得更容易處理究竟是什麼在走回頭路和原因,當我需要改變或調試。

無論如何,我這樣做的方式通常在控制器中。

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

然後在您的意見中,他們已被映射到您所需要的。