以下表单旨在同时编辑多个相关记录,同时根据in_groups_of
格式化记录数。
<%= form_for(@event) do |f| %>
<div class='row'>
<% @event.eventdistances.in_groups_of(6, false) do |eventdistances| %>
<%= f.fields_for :eventdistances do |eventdistance| %>
<div class='small-2 medium-2 large-2 columns'>
<%= eventdistance.check_box :active %> <%= eventdistance.object.building.nome %><br /><%= number_with_precision(eventdistance.object.distance, precision: 1) %> km
</div>
<% end %>
</div>
<% end %>
然而,生成的html beng并没有在一组6之后关闭行标签,并且整个shebang被渲染两次。
以某种方式发生in_groups_of
和fields_for
冲突,因为如果删除in_groups_of
标记,则只会呈现一个完整版本?
如何正确解决这个问题?
答案 0 :(得分:1)
<%= form_for(@event) do |f| %>
<% @event.eventdistances.in_groups_of(6, false) do |eventdistances| %>
<div class='row'>
<%= f.fields_for :eventdistances, eventdistances do |eventdistance| %>
<div class='small-2 medium-2 large-2 columns'>
<%= eventdistance.check_box :active %> <%= eventdistance.object.building.nome %><br /><%= number_with_precision(eventdistance.object.distance, precision: 1) %> km
</div>
<% end %>
</div>
<% end %>
<% end %>
当您调用f.fields_for :eventdistances do |eventdistance|
调用f.object.eventdistances
(f.object = @event)并且不使用您期望的局部变量时,第一个问题是什么。这就是为什么它重复六次所有记录。
您要做的是将集合作为第二个参数传递。此外,如果您想将每个组放入<div class='row'>
,您希望将标记放在传递给.in_groups_of
的块中。