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

时间:2014-11-19 09:04:47

标签: 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_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 %>

正如您所看到的,有一种唯一性验证可确保产品在类别中是独一无二的。当验证未通过时,问题就开始了。

调用@category.update_attributes(params[:category])会导致重复的表单对象。在使用错误呈现表单时,rails会创建其他关联产品,其ID为重复记录但名称不同。

例如:

鉴于我们在类别中有两种产品:面包和黄油。如果在编辑类别的产品时将Butter设置为Bread,则将创建一个新的表单对象,表单将使用Bread,Butter,Bread进行渲染,表示最后一个条目具有重复的名称。 如何防止rails创建这些重复记录?如果重要的话,我会使用rails 3.2.11。

0 个答案:

没有答案