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 2

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>

Или что-то подобное решает проблему.