2017-07-26 2 views
1

内の属性の一意性を検証する方法:のRails:これだけと同様の関係で1対多の関係

class Cat 
    belongs_to :owner 
end 

class Owner 
    has_many :cats 
end 

私はユニークな名前を持っているOwnerに属する各Catをしたいと思います。たとえば、BobとJohn(2人の所有者)はBillという名前の猫を所有することができますが、JohnはBillという名前の2匹の猫を所有することはできません。

私の猫モデルでvalidates :name, uniqueness: { scope: owner_id }を試しましたが、scope: ownerでもこのエラーが発生しています:NameError: undefined local variable or method owner_id for #<Class:0x000000073578f0>。 2番目は私のvalidatesステートメントをコメントアウトし、cat_instance.owner_idを呼び出すと適切なIDが返されます。

+0

私はあなたが '欠けていると思います:' 'バリデーション文でowner_id'前。 – Abdullah

答えて

3

ドキュメントhttp://guides.rubyonrails.org/active_record_validations.html#uniqueness

によると、あなたは、スコープオプションにシンボルを渡す必要があります。

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

ありがとうございます。 Cat 'has_one:pet、class_name: "Cat"、foreign_key: "pet_id" 'と言ってみましょう。 Billという名前の猫しか所有していませんが、BillはBillという猫も持っていますか? – mycellius

+0

私はあなたの要件を完全に理解しているかどうかは分かりませんが、スコーププロパティに複数の属性を渡すことができます: '一意性:{scope:[:owner_id、:pet_id]} ' –

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