2011-10-02 224 views
1

每当我尝试呈现游戏部分时,渲染的视图都会返回零。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 %> 

回答

1

你应该通过@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,当然这取决于你的具体实现。

+1

使用Rails 2,不需要显式地将从控制器生成的实例变量传递给部分。 :locals参数仅用于在来自调用者可用变量的部分上下文中创建局部变量。 – Nick

+0

这的确如此,虽然通过实例变量作为本地人倾向于保持一点清洁;我想这对个人偏好开放。我相信这些文档更好地阐明了这一点,“你也可以将局部变量传递给partials,使它们更加强大和灵活。例如,您可以使用此技术来减少新页面和编辑页面之间的重复,同时仍保留一些不同的内容 –