link_to_add_association 在多级嵌套环境中创建额外的表单

link_to_add_association creating extra forms in a multi-level nested environment

我的问题最好用图片来描述: extra forms added issue

这是顶级模特:

class Profession < ApplicationRecord
  has_many :procedure_categories, dependent: :destroy
  accepts_nested_attributes_for :procedure_categories, allow_destroy: true
end

第二个:

class ProcedureCategory < ApplicationRecord
  belongs_to :profession
  has_many :procedures

  accepts_nested_attributes_for :procedures, allow_destroy: true  
end

第三个:

class Procedure < ApplicationRecord
  belongs_to :procedure_category
end

这里是导致问题的代码,包括 link_to_add_association 方法。

<div class="nested-fields">
  <%= f.label :category %>
  <%= f.text_field :category, class: 'form-control' %>

  <%= f.label :description %>
  <%= f.text_field :description, class: 'form-control' %>

  <%= f.label :display_order %>
  <%= f.text_field :display_order, class: 'form-control' %>
    <% cs = options_for_select(controls, f.object.selection_type) %>

  <%= f.label :selection_type %>
  <%= f.select :selection_type, cs, class: 'form-control' %>

  <table class='table'>
    <thead>
      <tr>
        <th>Category</th>
        <th>Description</th>
        <th>Display Order</th>
        <th>Selection Type</th>
      </tr>
    </thead>
    <tbody class="procedures">
      <%= f.fields_for :procedures do |procedure| %>
        <%= render 'procedure_fields', f: procedure %>
      <% end %>
    </tbody>
  </table>


  <%= link_to_add_association 'Add Skill', f, :procedures, 
    data: { association_insertion_node: '.procedures', association_insertion_method: :append } %>
  <br><br>

  <%= link_to_remove_association "Remove Category", f %>
</div>

最后,这是我的部分渲染过程:

<tr class="nested-fields">

  <td><%= f.text_field :skill, class: 'form-control' %></td>
  <td><%= f.text_field :description, class: 'form-control' %></td>
  <td><%= f.text_field :display_order, class: 'form-control' %></td>

  <td><%= link_to_remove_association "Remove Skill", f %></td>
</tr>

感谢您的观看。

我猜你的每个 Category 部分下都有 .procedures。在这种情况下,您将追加到 .procedures class 的两个实例。

您需要为每个 Category 部分创建一个唯一标识符(例如,#procedure-category-6,其中 6 是动态分配的),然后使用 #procedure-category-6 .procedures 来定位您的插入。