Rails根据集合大小多次渲染部分

时间:2011-01-30 17:22:27

标签: ruby-on-rails ruby partial renderpartial

我有一个部分需要一个集合,遍历显示各个项目的集合。

以下是代码:

部分:

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

由于某种原因,部分由集合中的项目数量来呈现。如果集合中有十个项目,那么部分将被渲染出来。

这家伙有类似的问题,但它与布局有关。

Render partial in Ruby on rails a collection is multiplying items

这让我很生气,因为它应该很简单,所有其他部分工作都没有任何困难。

2 个答案:

答案 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