1

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

指数

<%= render @events_future %>

当前的

<%= render @events_current %>

事件控制器

def index
  @events_future = ...
end

_event.html.erb

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

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

4

3 回答 3

1

我认为最好的做法是将 a 传递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 %>
于 2013-08-02T14:46:42.240 回答
0

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

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

然后在你的部分你做:

<% events.each do |event| %>
...
<% end %>
于 2013-08-02T14:46:50.497 回答
0

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

我看到您有@events_futureand @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 %>
于 2013-08-02T15:21:59.133 回答