Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails接受\u嵌套的\u属性:消除重复_Ruby On Rails_Ruby_Nested Attributes_Validates Uniqueness Of - Fatal编程技术网

Ruby on rails Rails接受\u嵌套的\u属性:消除重复

Ruby on rails Rails接受\u嵌套的\u属性:消除重复,ruby-on-rails,ruby,nested-attributes,validates-uniqueness-of,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: { sco

假设我们有以下型号:

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
当我使用包含重复标题的嵌套窗口小部件属性保存用户时,会出现预期的验证错误。有什么好方法可以避免验证错误,并在保存前以静默方式消除重复条目


谢谢。

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

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) }

不过,这并不考虑内存中的重复属性。例如:user.widgets_attributes={0'=>{title:'Foo'},'1'=>{title:'Foo'}}仍将尝试保存副本。