У меня есть модель:
class Contact < ActiveRecord::Base
has_many :phones
accepts_nested_attributes_for :phones
end
Я хочу создать 50 телефонных номеров, которые пользователи могут добавить (возможно, уже есть телефоны 1 или 5, но я всегда хочу 50 доступных) В моем контроллере:
while contact.phones.length < 50
contact.phones.build({:phone_type_id => PhoneType['a_cool_type'].id})
end
На мой взгляд, я хочу иметь 2 столбца телефона с номерами по 25 строк
<%= semantic_form_for contact do |form| %>
<table width=50%>
<%= form.inputs :for => :phones[0..25] do |phone_form| %>
<td align="center"><%= phone_form.input :number, :label => false %></td>
....
<% end %>
</table>
<table width=50%>
<%= form.inputs :for => :phones[25..49] do |phone_form| %>
<td align="center"><%= phone_form.input :number, :label => false %></td>
....
<% end %>
</table>
<%end %>
Очевидно, что строка:
<%= form.inputs :for => :phones[25..49] do |phone_form| %>
не делает 'Это работает, но оно передает мое намерение (я надеюсь).Я хочу иметь больше контроля над тем, как formtastic получает базовую ассоциацию объектов.
Следующие работы работают, но я не могу легко сделать два столбца без причудливой CSS.
<%= form.inputs :for => :phones do |phone_form| %>
Есть предложения?
---------- Обновление ----
Мне удалось обойти это окольным путем: я создал отдельный список номеров телефонов, но некак contact.phones.build, но Phone.new (: contact_id => contact.id) и сохраните их в списке с именем @ new_phones
Тогда моя форма выглядит следующим образом:
<%= semantic_form_for @contact, :url => ..., do |f| %>
<% @new_phones[0...25].each_with_index do |phone, i| %>
<%= f.fields_for :phones, phone, :child_index => i do |phone_form| %>
<%= render "phone_fields", {:phone_form => phone_form, :phone => phone} %>
<%end%>
<% end %>
....
<% @new_phones[25...50].each_with_index do |phone, i| %>
<%= f.fields_for :phones, phone, :child_index => i+25 do |phone_form| %>
<%= render "phone_fields", {:phone_form => phone_form, :phone => phone} %>
<%end%>
<% end %>
<%end%>
Это позволило мне отобразить 25 телефонов на одной части страницы и 25 на другой с nested_attributes_for: телефоны, работающие должным образом при отправке формы.