Rails Cocoon:在不删除父项的情况下删除子项(深层嵌套表单)

时间:2013-06-12 20:05:39

标签: ruby-on-rails nested-forms cocoon-gem

我有一个具有深度嵌套的表单,用于创建属性模板。 property_template has_many property_template_fields和property_template_field has_many property_template_options。

一切正常,但是当我已经创建了一个字段并且该字段有一个或多个选项时,我尝试只删除一个选项。我希望它只删除该选项,但当我点击它删除所有选项和字段。有没有办法让我只删除那个孩子而不是其父母或兄弟姐妹?

_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 %>   

2 个答案:

答案 0 :(得分:2)

我可以使用link_to_remove_association中的wrapper-class选项在我的项目中修复此问题。我在子部分中使用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>

或类似的东西解决了这个问题。

答案 1 :(得分:0)

第二部分缺少nested-fields

nested-fields选项的{wrapper-classdefault