2011-10-02 21 views
1

ゲームを部分的にレンダリングしようとすると、レンダリングされているビューでは何も返されません。あなたが部分的にローカル変数として@gamesを渡す必要があり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

:ここ

は、部分的なゲームです。その使用方法に関するドキュメントを参照することを検討してください。私はまた、フラッシュ通知が部分的に内部に属してはならないと感じます。また

<%= render :partial => "game_partial", :locals => { :games => @games } %> 

@gamesがnilでないことを確認することも重要であるが、次のようにあなたが部分をレンダリングするでしょう

<% games.each do |game| %> 
    <tr> 
    <td><%= game.name %></td> 
    <td><%= link_to 'Pick!', vote_up_game_path(game.id), :method => :post %></td> 
    </tr> 
<% end %> 

あなたのコードを修正することができます。そうであれば、あなたはまだあなたのエラーを得るでしょう - コントローラをチェックする必要があります。私はあなたのコントローラーが@games = Game.allを持っていると想像していましたが、もちろんこれはあなたの特定の実装に依存しています。

+1

Rails 2では、コントローラから生成されたインスタンス変数を明示的にパーシャルに渡す必要はありません。 :localsパラメータは、呼び出し元から利用可能な変数からの部分変数のコンテキスト内でローカル変数を作成するためのものです。 – Nick

+0

これは実際には当てはまりますが、インスタンス変数をローカルとして渡すことは物事を少しきれいに保つ傾向があります。私はこれが個人的な好みに開いていると思います。私はドキュメントがこれをよりよく解明してくれると信じています。「ローカル変数を部分変数に渡すこともでき、より強力で柔軟なものにすることができます。たとえば、このテクニックを使用して、新しいページと編集ページ間の重複を減らしながら、別個のコンテンツを残しておくことができます –

関連する問題