是否可以验证针对多态关系确定的子模型属性的唯一性?
例如,我有一个名为field
的模型属于fieldable
:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => :fieldable_id
end
我还有其他几个有很多字段的模型(Pages,Items)。所以我想要的是验证字段名称与父模型的唯一性,但问题是,页面和项目偶尔会共享相同的ID号,导致验证失败时不应该。
我只是做错了还是有更好的方法来做到这一点?
答案 0 :(得分:21)
扩大范围以包括可现场类型:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end
答案 1 :(得分:0)
您还可以添加消息以覆盖默认消息,或使用范围添加验证:
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'
您将替换默认的&#39;主题&#39; rails会使用您在此处指定的错误添加错误。所以不要说:Fieldable Id has been already taken
左右,而是说:
Field cannot be duplicated