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

由于某种原因,部分是由集合中的项目数量呈现的。如果集合中有十个项目,则部分呈现然后次。

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

在 Ruby on rails 中渲染部分集合正在增加项目

这让我发疯,因为它应该很简单,并且所有其他部分都可以毫无困难地工作。

4

2 回答 2

4

:collection导致控制器迭代 @points 并为集合中的每个项目渲染一次部分。如果您将部分设置为仅渲染一个点,则控制器代码应按预期工作。

顺便说一句,在 Rails 3 中,您可以将<%= render @points %>其用作<%= 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 回答