Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 AR根据多态关系验证的唯一性_Ruby On Rails_Validation_Activerecord_Polymorphic Associations - Fatal编程技术网

Ruby on rails Rails AR根据多态关系验证的唯一性

Ruby on rails Rails AR根据多态关系验证的唯一性,ruby-on-rails,validation,activerecord,polymorphic-associations,Ruby On Rails,Validation,Activerecord,Polymorphic Associations,是否可以根据多态关系验证子模型的属性作用域的唯一性 例如,我有一个名为field的模型,它属于fieldable: class Field < ActiveRecord::Base belongs_to :fieldable, :polymorphic => :true validates_uniqueness_of :name, :scope => :fieldable_id end 类字段:true 验证:name、:scope=>:fieldable\u id的

是否可以根据多态关系验证子模型的属性作用域的唯一性

例如,我有一个名为
field
的模型,它属于
fieldable

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => :fieldable_id
end
类字段:true
验证:name、:scope=>:fieldable\u id的唯一性
结束
我还有其他几个模型(页面、项目),它们有许多字段。因此,我想根据父模型验证字段名的唯一性,但问题是,有时页面和项目共享相同的ID号,导致验证在不应该的情况下失败


我是做错了还是有更好的方法来实现这一点?

只需扩大范围以包括fieldable类型:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end
类字段:true
验证:name、:scope=>[:fieldable\u id、:fieldable\u type]的唯一性
结束

您还可以添加消息以覆盖默认消息,或使用范围添加验证:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated'
end
您将用您在此处指定的主题替换rails添加到错误中的默认“主题”。因此,与其说:
字段Id已经被取了
左右,不如说:

 Field cannot be duplicated

非常感谢。当您知道如何操作时会简化:)
 Field cannot be duplicated