Rails рендерит частичное несколько раз в зависимости от размера коллекции - PullRequest
2 голосов
/ 30 января 2011

У меня есть часть, которая принимает коллекцию, перебирает эту коллекцию, показывая отдельные элементы.

Вот код:

Частичное:

<% 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 на рельсах, коллекция умножает элементы

Это сводит меня с ума, потому что это должно быть просто, и все остальные части работают без каких-либо затруднений.

Ответы [ 2 ]

4 голосов
/ 30 января 2011

:collection заставляет контроллер перебирать @points и визуализировать частичное значение один раз для каждого элемента в коллекции. Если вы настраиваете частичное отображение только одной точки, код контроллера должен работать как положено.

Кстати, в Rails 3 вы можете использовать <%= render @points %> в качестве ярлыка для <%= render :partial => "points/point", :collection => @points %>

2 голосов
/ 30 января 2011

параметр :collection говорит частичному «отобразить частичное для каждого элемента @points», а затем частичное повторение снова и снова в той же коллекции.

В вашей части, просто избавьтесь от оберточной петли for point in @points, и она должна работать нормально.

Смотрите здесь для получения дополнительной информации: http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections

...