Rails accepted_nested_attributes:消除重复

时间:2013-10-29 03:18:43

标签: ruby-on-rails ruby nested-attributes validates-uniqueness-of

假设我们有以下型号:

class User < ActiveRecord::Base
    has_many :widgets
    accepts_nested_attributes_for :widgets, allow_destroy: true
end

class Widget < ActiveRecord::Base
    belongs_to :user
    validates :title, presence: true, uniqueness: { scope: [:user_id] }
end

当我使用包含重复标题的嵌套窗口小部件属性保存用户时,我得到了预期的验证错误。什么是避免验证错误并在保存之前默默消除重复条目的好方法?

感谢。

1 个答案:

答案 0 :(得分:0)

如果嵌套属性与某些条件不匹配,您可以拒绝它们:

accepts_nested_attributes_for :widgets,
  allow_destroy: true,
  reject_if: lambda { |w| Widget.pluck(:title).include?(w.title) && Widget.pluck(:user_id).include?(w.user_id) }