Rails的:如何仅在一个一对多的关系
在一个关系类似于此验证属性的唯一性:Rails的:如何仅在一个一对多的关系
class Cat
belongs_to :owner
end
class Owner
has_many :cats
end
我想这属于一个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。
按照文档http://guides.rubyonrails.org/active_record_validations.html#uniqueness
你应该通过一个符号的作用域选项:
validates :name, uniqueness: { scope: :owner_id }
谢谢。假设一个Cat has_one:pet,class_name:“Cat”,foreign_key:“pet_id”,我将如何让名称在所有者**下的Cat级别上唯一唯一**即,从前面的例子中,Bob可以只有一只名叫比尔的猫,但比尔可以有一只名叫比尔的猫? – mycellius
我不确定我是否完全理解了您的需求,但是您可以将多个属性传递给范围属性,如:'uniqueness:{scope:[:owner_id,:pet_id]}',我认为这可能有效 –
class Owner
has_many :cats
validates :name, uniqueness: { scope: :owner_id }
end
我猜你缺少':''之前在owner_id'您的验证声明。 – Abdullah