2011-10-02 3 views
1

Chaque fois que j'essaie de rendre les jeux partiels, la vue dans laquelle ils sont restitués donne un retour nul.Rails Rendering Édition

est ici les jeux partiels:

<%= 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 %> 

Répondre

1

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.

+1

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

+0

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. –