时,它更多钞票来验证作用域对多态关系的子模型的属性的唯一性?

例如我有一个模型称为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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top