2012-03-05 24 views
2

私のアプリでユーザーuniqnessカップルに困っています...ユニークなカップルとhas_many関係

私はユーザーがいくつかの連絡先にリンクすることができます。 リレーションテーブルを使用してリンクを作成しています(魔法使いにはレベル属性もあります)。

私はユーザー、連絡先、リレーションシップを持っています。 私の問題は、カップルのcontact_idとuser_idがuniqでなければならないことです(一度しかリンクできません)。

contact.rb

にhas_many:関係、:依存=>:ユーザー:

にhas_manyを破壊=>を通じて:関係、:=>真

ユーザーUNIQ .rb

has_many:relations、:dependent:>:destroy

にhas_many:連絡先、:=>を通じて:関係、:uniqの=>真

relation.rb

belongs_toの:ユーザー

belongs_toの:接触

私はforeign_keyなどを使用する必要があるかどうかわかりません。単純なものが必要です。

歓迎

答えて

1
class Relation < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :contact 
     validates_uniqueness_of :contact_id, :scope => :user_id 

    end 
1

一意性検証で:scopeオプションを使用できます。 validates_uniqueness_of :contact, :scope => :userのようなものは、特定のユーザーの場合、連絡先が重複しないことを意味します。だから、あなたの属性のそれぞれを他のものに限定して検証すれば、あなたが望むものが得られると思います。よりよい方法があるかもしれません(私は明らかに分かっていません)。

+0

OK、それは素晴らしいです。しかし、それは:user_idではない:ユーザー –

+0

うん、申し訳ありません。私は頻繁にそれを使用しないで、あなたが実際の鍵に言及して忘れていた。 – ksol

関連する問題