Rails渲染问题
问题描述:
每当我尝试呈现游戏部分时,渲染的视图都会返回零。Rails渲染问题
这里是部分游戏:
<%= flash[:notice] %>
<tr>
<% @games.each do |game| %>
<td><%= game.name %></td>
<td><%= link_to('Pick!', vote_up_game_path(game.id), :method => :post) %></td>
</tr>
<% end %>
答
你应该通过@games
作为一个局部变量的部分。考虑查看其使用情况的文档。我也觉得flash-notice不应该属于部分内容。您可能还需要纠正你的代码
<% games.each do |game| %>
<tr>
<td><%= game.name %></td>
<td><%= link_to 'Pick!', vote_up_game_path(game.id), :method => :post %></td>
</tr>
<% end %>
你将会使部分如下
<%= render :partial => "game_partial", :locals => { :games => @games } %>
同样重要的是确保@games
不为零。如果是这样,你仍然会得到你的错误 - 你应该检查你的控制器;通常我会想象你的控制器会有@games = Game.all
,当然这取决于你的具体实现。
使用Rails 2,不需要显式地将从控制器生成的实例变量传递给部分。 :locals参数仅用于在来自调用者可用变量的部分上下文中创建局部变量。 – Nick
这的确如此,虽然通过实例变量作为本地人倾向于保持一点清洁;我想这对个人偏好开放。我相信这些文档更好地阐明了这一点,“你也可以将局部变量传递给partials,使它们更加强大和灵活。例如,您可以使用此技术来减少新页面和编辑页面之间的重复,同时仍保留一些不同的内容 –