Rails的AR validates_uniqueness_of对多态关系
-
23-09-2019 - |
题
时,它更多钞票来验证作用域对多态关系的子模型的属性的唯一性?
例如我有一个模型称为field
属于fieldable
:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => :fieldable_id
end
我有若干其他模型(页,相关文件),其具有许多领域。所以,我要的是验证对父模型字段名的唯一性,但问题是,偶尔有页面和项目共享相同的ID号,导致验证失败时,他们不应该。
我只是这样做不对,还是有更好的方式来做到这一点?
解决方案
只要扩大范围,以包括所述fieldable类型:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end
其他提示
您还可以添加一个消息到覆盖默认消息,或使用范围来添加验证:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated'
end
作为奖励,如果你去你en.yml,然后输入:
activerecord:
attributes:
field:
fieldable_id: 'Field'
您要更换默认的“主体”是轨添加到与您在此处指定的一个错误。的话说因此,而不是:Fieldable Id has been already taken
左右,它会说:
Field cannot be duplicated
不隶属于 StackOverflow