2011-01-30 1 views
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 

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

У этого парня была аналогичная проблема, но это было связано с макетами.

Render partial in Ruby on rails a collection is multiplying items

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

ответ

3

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

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

+1

Я бы с иной точки зрения, вероятно, что-то вроде этого: 'если @ points.nil? render: action => "index" end' – weltraumpirat

+0

Ваше частичное имя должно быть _point.html.erb, и оно должно находиться в точках/ – weltraumpirat

+0

Или ... вы можете просто использовать: object => @points, который пройдет массив в частичный .... либо или. – slotishtype

2

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

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

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

Смежные вопросы