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