Rails:如何仅在一对多关系中验证属性的唯一性

时间:2017-07-26 18:40:04

标签: ruby-on-rails

在类似的关系中:

class Cat
  belongs_to :owner
end

class Owner
  has_many :cats
end

我希望属于Cat的每个Owner都有一个唯一的名称。例如,鲍勃和约翰(两个所有者)都可以拥有一只名叫比尔的猫,但约翰不能拥有两只名叫比尔的猫。

我在我的Cat模型以及validates :name, uniqueness: { scope: owner_id }上尝试了scope: owner,但我遇到了这个错误:NameError: undefined local variable or method owner_id for #<Class:0x000000073578f0>。第二个我注释掉我的validates语句,调用cat_instance.owner_id返回正确的id。

2 个答案:

答案 0 :(得分:3)

根据文档http://guides.rubyonrails.org/active_record_validations.html#uniqueness

您应该将符号传递给范围选项:

validates :name, uniqueness: { scope: :owner_id }

答案 1 :(得分:1)

class Owner
  has_many :cats
  validates :name, uniqueness: { scope: :owner_id }
end