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