Rails Cocoon: удаление ребенка без удаления родителя (глубоко вложенные формы)
У меня есть форма, которая имеет глубокую вложенность и используется для создания шаблона свойств. В property_template property_template_fields типа has_many и property_template_field property_template_options типа has_many.
Все работает нормально, за исключением того, что когда я уже создал поле и это поле имеет 1 или более вариантов, и я пытаюсь удалить только один вариант. Я хочу, чтобы он просто удалил только эту опцию, но когда я нажимаю на нее, удаляются все опции и поле. Есть ли способ для этого? чтобы я просто забрал этого ребенка и никого из его родителей или братьев и сестер?
_form.формат html.erb
<%= simple_form_for [:admin, @property_template] do |f| %>
<ul id="properties">
<fieldset>
<div>
<%= f.input :name %>
<ul>
<div>
<%= f.simple_fields_for :property_template_fields do |property| %>
<%= render "property_template_field_fields", :f => property %>
<% end %>
</div>
<br />
<div><%= link_to_add_association "Add Property", f, :property_template_fields, :partial => "property_template_field_fields" %></div>
</ul>
</div>
<%= f.submit %>
</fieldset>
</ul>
_propety_template_fields
<div class="nested-fields" >
<li><%= f.input :name, label:"Field Name" %></li>
<li style='float:right;'><%= link_to_remove_association "Remove", f %></li>
<ul>
<div>
<%= f.simple_fields_for :property_template_options do |option| %>
<%= render "property_template_option_fields", :f => option %>
<% end %>
</div>
</ul>
<div style='float:right;'><%= link_to_add_association "Add Option", f, :property_template_options, :partial => 'property_template_option_fields' %> | </div>
_propety_template_options
<li style='padding-left:35px;'><%= f.input :value, :label => 'Field Option' %></li>
<li style='float:right;'><%= link_to_remove_association "Remove Option", f %></li>
<%= f.hidden_field :position %>
1 ответ:
Я смог исправить эту проблему в своем проекте, используя опцию класса-оболочки в link_to_remove_association. Я использовал div в детской части в качестве обертки.
Так что смотрите, если изменить _property_template_options на
<div class="myclass" > <li style='padding-left:35px;'><%= f.input :value, :label => 'Field Option' %></li> <li style='float:right;'><%= link_to_remove_association "Remove Option", f, { wrapper_class: "myclass" } %></li> <%= f.hidden_field :position %> </div>
Или что-то подобное решает проблему.