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個のアイテムがある場合は、パーシャルがレンダリングされます。

この男も同様の問題を抱えていましたが、それはレイアウトに関連していました。

RubyonRailsで部分的にレンダリングするコレクションはアイテムを増やしています

それは単純でなければならず、他のすべての部分は問題なく機能するので、それは私を怒らせています。

4

2 に答える 2

4

これ:collectionにより、コントローラーは@pointsを反復処理し、コレクション内のアイテムごとにパーシャルを1回レンダリングします。1つのポイントのみをレンダリングするようにパーシャルを設定した場合、コントローラーコードは期待どおりに機能するはずです。

<%= render @points %>ところで、Rails 3では、のショートカットとして使用できます<%= render :partial => "points/point", :collection => @points %>

于 2011-01-30T17:34:44.483 に答える
2

:collectionパラメータは、パーシャルに「の各メンバーのパーシャルを表示する」ことを指示しており、パーシャルは@points同じコレクションを再度繰り返します。

パーシャルでは、ラッピングループを取り除くだけで、for point in @points正常に機能するはずです。

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

于 2011-01-30T17:32:46.567 に答える