我有一个部分需要一个集合,遍历显示各个项目的集合。
以下是代码:
部分:
<% 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 " 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
由于某种原因,部分由集合中的项目数量来呈现。如果集合中有十个项目,那么部分将被渲染出来。
这家伙有类似的问题,但它与布局有关。
Render partial in Ruby on rails a collection is multiplying items
这让我很生气,因为它应该很简单,所有其他部分工作都没有任何困难。
答案 0 :(得分:4)
:collection
使控制器迭代@points并为集合中的每个项呈现部分一次。如果将partial设置为仅渲染一个点,则控制器代码应按预期工作。
BTW,在Rails 3中,您可以使用<%= render @points %>
作为<%= render :partial => "points/point", :collection => @points %>
的快捷方式
答案 1 :(得分:2)
:collection
参数告诉部分“显示@points
的每个成员的部分”,然后您的部分再次通过相同的集合进行迭代。
在你的部分中,只需摆脱包裹for point in @points
循环,它应该可以正常工作。
有关详细信息,请参阅此处:http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections