Rails AR validates_uniqueness_of反对多态关系

时间:2010-03-31 21:27:42

标签: 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

我还有其他几个有很多字段的模型(Pages,Items)。所以我想要的是验证字段名称与父模型的唯一性,但问题是,页面和项目偶尔会共享相同的ID号,导致验证失败时不应该。

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

2 个答案:

答案 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