Если я читаю это право, похоже, вам нужно 'accepts_nested_attributes_for: show_entries' на модели Dog.Затем в форме вам нужно «собака [show_entry] [некое уникальное целое число] [какое-то имя атрибута]» для каждой комбо-записи / записи атрибута.Уникальный int используется для группировки атрибутов вместе.Он не связан с идентификатором модели шоу-записи.
Тогда вы должны иметь возможность сказать «Dog.new params [: dog]» в действии создания, и оно должно автоматически создать записи шоу иассоциации.
ОБНОВЛЕНИЕ: Извините, я был на моем телефоне вчера вечером, поэтому было сложно написать кучу кода.Но основная идея заключается в том, чтобы получить правильно отформатированные данные ShowEntry внутри формы Dog.
<%= form_for @dog do |form| %>
<%= form.fields_for :show_entries do |se_form| %>
<%# Build form elements for existing show entries %>
<% end %>
<%# These shows should either be pre-filtered down to the ones not already associated to the dog or you should add that check in the loop below %>
<% @shows.each do |show| %>
<%= form.fields_for :show_entries, ShowEntry.new(:show => show, :dog => @dog) do |new_se| %>
<%# Build form elements for new show entries %>
<% end %>
<% end %>
<%= form.submit %>
<% end %>
Это позволит вам создавать новые записи ShowEntry при обновлении записи Dog.Вы должны быть в состоянии передать params[:dog]
непосредственно в update_attributes
внутри действия вашего контроллера.
Если вы хотите иметь возможность уничтожать записи шоу, тогда вам нужно добавить :allow_destroy => true
к accepts_nested_attributes_for
декларация.Затем, передавая имя с именем :_destroy
с истинным значением для конкретного ShowEntry
в форме update_attributes
, автоматически удалит модель ShowEntry
.
Возможно, вы захотите использовать :_destroy
в качествескрытое поле со значением true, за которым следует флажок false.Таким образом, когда флажок установлен, запись не будет уничтожена, и новые данные вступят в силу.Если флажок снят, :_destroy
будет иметь значение true, и запись будет уничтожена или не сохранена в БД.Вы можете использовать JavaScript для включения и отключения полей формы, связанных с ShowEntry
, чтобы пользователи не могли вводить данные, которые не будут сохранены.