2011-10-02 220 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,使它們更加強大和靈活。例如,您可以使用此技術來減少新頁面和編輯頁面之間的重複,同時仍保留一些不同的內容 –