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
来定位您的插入。
我的问题最好用图片来描述: 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
来定位您的插入。