【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多