Vous devez passer @games
comme une variable locale à la partie. Pensez à regarder la documentation sur son utilisation. Je pense aussi que le flash-notice ne devrait pas appartenir à l'intérieur du partial. Vous pouvez également corriger votre code
<% games.each do |game| %>
<tr>
<td><%= game.name %></td>
<td><%= link_to 'Pick!', vote_up_game_path(game.id), :method => :post %></td>
</tr>
<% end %>
Vous rendriez la partie comme suit
<%= render :partial => "game_partial", :locals => { :games => @games } %>
Il est également important d'assurer @games
n'est pas nul. Si c'est le cas, vous obtiendrez toujours votre erreur - vous devriez vérifier votre contrôleur; typiquement j'imagine que votre contrôleur aurait @games = Game.all
, bien sûr cela dépend de votre implémentation particulière.
Avec Rails 2, il n'est pas nécessaire de passer explicitement une variable d'instance générée par le contrôleur à une partie. Le paramètre: locals est uniquement destiné à créer une variable locale dans le contexte du partiel à partir d'une variable disponible auprès de l'appelant. – Nick
Cela est en effet vrai, bien que passant les variables d'instance que les locaux ont tendance à garder les choses un peu plus propre; Je suppose que cela ouvre à la préférence personnelle. Je crois que les docs l'élucident mieux, 'Vous pouvez également passer des variables locales en partiels, les rendant encore plus puissants et flexibles. Par exemple, vous pouvez utiliser cette technique pour réduire la duplication entre les nouvelles pages et les pages d'édition, tout en conservant un peu de contenu distinct. –