【问题标题】:Rails AR validates_uniqueness_of against polymorphic relationshipRails AR validates_uniqueness_of 针对多态关系
【发布时间】:2010-03-31 21:27:41
【问题描述】:
是否可以根据多态关系验证子模型属性的唯一性?
例如,我有一个名为field 的模型属于fieldable:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => :fieldable_id
end
我有几个其他模型(页面、项目),它们有很多字段。所以我想要的是针对父模型验证字段名称的唯一性,但问题是有时 Page 和 Item 共享相同的 ID 号,导致验证在不应该时失败。
我只是做错了还是有更好的方法来做到这一点?
【问题讨论】:
标签:
ruby-on-rails
validation
activerecord
polymorphic-associations
【解决方案1】:
只是扩大范围以包括可字段类型:
class Field < ActiveRecord::Base
belongs_to :fieldable, :polymorphic => :true
validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end
【解决方案2】:
您还可以添加一条消息来覆盖默认消息,或者使用范围来添加验证:
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'
您将用您在此处指定的主题替换 rails 添加到错误中的默认“主题”。所以与其说:Fieldable Id has been already taken 左右,不如说:
Field cannot be duplicated