开发者

Rails AR validates_uniqueness_of against polymorphic relationship

开发者 https://www.devze.com 2022-12-25 02:10 出处:网络
Is i开发者_JAVA百科t posible to validate the uniqueness of a child model\'s attribute scoped against a polymorphic relationship?

Is i开发者_JAVA百科t posible to validate the uniqueness of a child model's attribute scoped against a polymorphic relationship?

For example I have a model called field that belongs to fieldable:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => :fieldable_id
end

I have several other models (Pages, Items) which have many Fields. So what I want is to validate the uniqueness of the field name against the parent model, but the problem is that occasionally a Page and an Item share the same ID number, causing the validations to fail when they shouldn't.

Am I just doing this wrong or is there a better way to do this?


Just widen the scope to include the fieldable type:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end


You can also add a message to override the default message, or use scope to add the validation:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated'
end

As a bonus if you go to your en.yml, and enter:

  activerecord:
    attributes:
     field:
       fieldable_id: 'Field'

You are going to replace the default 'subject' that rails add to the errors with the one you specify here. So instead of saying: Fieldable Id has been already taken or so, it would say:

 Field cannot be duplicated
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号