我的新记录表单是为每个循环创建fields_for迭代的副本。
例如:
我在循环中有一个表单,因此对于每个结果,该结果都有一个表单。
有3个结果吗:
第一个结果将具有正确的fields_for对象 第二种形式将有 x2 个fields_for对象(每个对象重复( 第三种形式将有 x3 个fields_for对象(每个对象额外 2 个(
我有一个表单,需要循环通过has_many ... through:
关联。
形式:
<%= form_for @shop_product do |f| %>
<% PrintLocation.all.each{|p|@shop_product.shop_product_print_files.build(print_location: p)} %>
<%= f.fields_for :shop_product_print_files do |ff| %>
<%= ff.object.print_location.title %>
<% end %>
<%= f.submit %>
<% end %>
这将创建print_location
对象的x(loop_result(。
创建@shop_product后,此问题就会消失,因为我使用以下表单进行编辑:
<%= form_for shop_product do |f| %>
<% PrintLocation.all.each{|p| shop_product.shop_product_print_files.build(print_location: p) if shop_product.shop_product_print_files.where(print_location: p).empty? } %>
<%= f.fields_for :shop_product_print_files do |ff| %>
<%= ff.object.print_location.title %>
<% end %>
<%= f.submit %>
<% end %>
这消除了任何重复。 我尝试了这个新形式,但没有奏效。 我尝试在PrintLocation.each
上使用distinct
,但这导致了错误,未定义的方法"不同"。
型:
**shop_product**
has_many :shop_product_print_files
has_many :print_locations, through: :shop_product_print_files
accepts_nested_attributes_for :shop_product_print_files, reject_if: :reject_file, :allow_destroy => true
为什么会出现fields_for对象的重复 x (loop_result.count(,我该如何解决这个问题?
我相信双循环是由于<%= f.fields_for record do |ff| %>
中的额外等于.
你能试试这个吗:
<%= form_for shop_product do |f| %>
<% PrintLocation.find_each do |p| %>
<% record = shop_product.shop_product_print_files.where(print_location: p).first_or_initialize %>
<% unless record.persisted? %>
<% f.fields_for record do |ff| %>
<%= ff.object.print_location.title %>
<% end %>
<%= f.submit %>
<% end %>
<% end %>
<% end %>