2011-01-30 20 views
2

私はコレクションを取る部分を持っていて、そのコレクションを繰り返して、個々のアイテムを表示します。ここコレクションのサイズに基づいて部分レンダリングが部分的にレンダリングされる

コードである:

部分:

<% for point in @points %> 
<div id="im" style="float:left;width:80px;height:90px;padding:5px;border:solid 1px #D3D3D3; margin:5px; "> 
    <img width="80" height="80" src="\uploaded\<%= point.id %>.gif" /> 
    <%= link_to_remote "&nbsp;&nbsp;&nbsp;Delete", :url => { :action => "delete_point", :id => point.id }, :before => "Element.show('spinner')", :complete => "Element.hide('spinner')" %>   
</div> 
<% end %> 

コントローラからRJS:

page.replace_html :points_partial, :partial => 'points', :collection=>@points 

部分は、内のアイテムの量によってレンダリングされたいくつかの理由コレクション。コレクションに10個のアイテムがある場合、その部分がレンダリングされます。

この男には同様の問題がありましたが、レイアウトに関連していました。それはシンプルであるべきで、他のすべての部分音が難なく動作するため、

Render partial in Ruby on rails a collection is multiplying items

それは私が怒っ駆動されます。

答えて

3

:collectionは、コントローラが@pointsを反復処理し、コレクション内の各項目に対して一度部分をレンダリングするようになります。パーツを1点だけ描画するように設定した場合、コントローラコードは期待どおりに動作するはずです。 `場合@のpoints.nil:

ところで、レールに3あなたが<%= render :partial => "points/point", :collection => @points %>

+1

ためのショートカットとして<%= render @points %>を使用することができます私はおそらく、別のビューでこのような何かを行くだろうか?レンダリング:action => "index" end' – weltraumpirat

+0

パーシャルの名前は_point.html.erbでなければならず、ポイント/ – weltraumpirat

+0

に存在しなければなりません。部分的に配列してください。 – slotishtype

2

:collectionパラメータは、部分的に「@pointsの各メンバの部分を表示する」と指示してから、部分的に同じコレクションを繰り返し処理します。

部分的には、ループfor point in @pointsのループを取り除いてうまくいくはずです。

は、詳細はこちらをご覧ください:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections

関連する問題