使用特定控制器变量渲染部分

时间:2013-08-02 14:42:18

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试使用here中的Rails命名约定,并使用一个部分呈现具有不同变量的两个不同页面。

索引

<%= render @events_future %>

电流

<%= render @events_current %>

事件控制器

def index
  @events_future = ...
end

_event.html.erb

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

我得到了未定义的“each”方法 请指出我正确的方向

3 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:0)

渲染时必须将变量传递给partial:

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

然后在你的部分你做:

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

答案 2 :(得分: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 %>