2013-08-02 66 views
1

我正在嘗試使用Rails命名約定,如here中所示,並使用一個部分渲染兩個不同變量的頁面。使用特定的控制器變量渲染部分

索引

<%= render @events_future %> 

電流

<%= render @events_current %> 

事件控制器

def index 
    @events_future = ... 
end 

_event.html.erb

<% @events.each do |event| %> 
... 
<% end %> 

我得到未定義「每個」方法 請點我在正確的方向

回答

1

我想在這裏做的最好的事情是一個locals傳遞到部分_event.html.erb由於部分需要顯示不同的對象喜歡如下:

索引

<%= render 'event', events: @events_future %> 

電流

<%= render 'event', events: @events_current %> 

在上述兩個render語句中,events作爲本地傳遞給event部分。

然後在你的_event.html.erb你會做:

<% events.each do |event| %> 
... 
<% end %> 
+0

我想引用瑞安貝茨在這裏 - 「是的,它的工作!」 –

0

您必須將變量傳遞到局部,當你使它:

render :partial => 'event', :locals => {:events => @events_current} %> 
render :partial => 'event', :locals => {:events => @events_future} %> 

,然後在局部你做:

<% events.each do |event| %> 
... 
<% end %> 
+0

是的你是對的。我的錯。 – amb110395

+0

好吧我刪除我的評論然後;) – MrYoshiji

0

您是否已經在控制器中初始化了@events

我看到你有@events_future@events_current,但是如果@events沒有在控制器中定義,你的視圖就不知道你指的是什麼。

如果你想重用events兩個未來和電流,使用下面的每個視圖

<!-- index.html.erb --> 
<%= render 'event', events: @events_future %> 

<!-- current.html.erb --> 
<%= render 'event', events: @events_current %> 

這使得_event.html.erb部分,並設置events局部變量。在_event.html.erb,使用

<% events.each do |event| %> 
    <!-- do stuff --> 
<% end %> 
+0

不,我沒有@events初始化,但得到了它的一切工作(見上面的答案) –