Ruby Rails 3在更新嵌套记录时为其创建重复的表单对象

Ruby Rails 3在更新嵌套记录时为其创建重复的表单对象,ruby,forms,ruby-on-rails-3,Ruby,Forms,Ruby On Rails 3,有两种模式 class Category < ActiveRecord::Base has_many :products accepts_nested_attributes_for :products, allow_destroy: true validates_associated :products end class Product < ActiveRecord::Base belongs_to :category validate_uniqueness_

有两种模式

class Category < ActiveRecord::Base
  has_many :products
  accepts_nested_attributes_for :products, allow_destroy: true
  validates_associated :products
end

class Product < ActiveRecord::Base
  belongs_to :category
  validate_uniqueness_of :name, scope: :category_id
end
和类别的表格

<%= simple_form_for @category do |f| %>
    <%= f.simple_fields_for :products do |p| %>
      <%= render :partial => "product_fields", :locals => { :f => p } %>
    <% end %>
<% end %>
正如您所看到的,有一个唯一性验证,它确保产品在类别中是uniq的。验证未通过时,问题开始出现

调用@category.update_attributesparams[:category]会导致表单对象重复。当呈现带有错误的表单时,rails会创建id为重复记录但名称不同的附加关联产品

例如:

我们有两种产品:面包和黄油。如果在编辑类别的产品时将“黄油”设置为“面包”,则将创建一个新的表单对象,并使用“面包”、“黄油”、“面包”呈现该表单,表示最后一个条目具有重复的名称。 如何防止rails创建这些重复记录?如果有必要的话,我正在使用rails 3.2.11