我正在尝试使用here中的Rails命名约定,并使用一个部分呈现具有不同变量的两个不同页面。
索引
<%= render @events_future %>
电流
<%= render @events_current %>
事件控制器
def index
@events_future = ...
end
_event.html.erb
<% @events.each do |event| %>
...
<% end %>
我得到了未定义的“each”方法 请指出我正确的方向
答案 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 %>