2011-06-27 18 views
0

私のシナリオは私はユーザーモデル、コンタクトモデル、およびprofile_urlモデルを持っています。レールのモデルアソシエーションに関していくつかの助けが必要です

以下は、ユーザーと連絡先モデルの関連付けです。

user has_many :contacts, :through=> :user_contacts 
user has_many :user_contacts 

contact has_many :users, :through=>:user_contacts 
contact has_many :user_contacts 

user_contact belongs_to :user 
user_contact belongs_to :contact 

これまでのところ良いです。問題は、これらのモデルをprofile_urlモデルに関連付けるときに発生します。このシナリオは、ユーザーがアプリケーションに登録されるたびに、パブリックプロファイルURLとなるプロファイルURLが割り当てられます。だから私がサインアップした場合、私のプロフィールに公開URLとしてhttp://www.mysite.com/mike.fererraのようなものがあります。今すぐ連絡先リストに連絡先を追加すると、私のプロフィールに私用のURLが割り当てられます(同じプロフィールです。あなたには一意のURLが与えられます)。だから基本的に私のプロフィール、公共のURLと私的なURLにアクセスする2つの方法またはむしろ2つのURLがあります。どうして私はURLを分離する必要があるのか​​説明するのは難しいですが、あなたが疑問に思っているなら他の方法はないと思うだけです。

私がこのことを見る方法は、以下のようなSTI(単一テーブル継承)です。

ProfileUrl < ActiveRecord::Base 

PublicUrl < ProfileUrl 
PrivateUrl < ProfileUrl 

profile_url belongs_to :user 
user has_one :profile_url 

profile_url has_one :public_url 
profile_url has_many :private_urls 

private_url belongs_to :contact 
contact has_one :private_url 

私は一言で言えば物語は、ユーザとそのプロファイル(のみ、そのユーザの連絡先に具体的な世界のための公開URLとプライベートURL、各連絡先にアクセスする方法のプロフィールを中心に展開し、それが理にかなって願っています連絡先が所属するユーザーと同じプロファイルへの固有のプライベートURLを持ちます)。プロファイルテーブルには、type、user_id、contact_id、urlフィールドがあります。私はそれがこの状況を処理する最善の方法かどうかはわかりませんが、あなたがこの状況で私を助けることができれば素晴らしいと思います。

答えて

1

user has_many :contacts, :through=> :user_contactsまでは、user_contactsは、ユーザーの連絡先リスト内の各連絡先のプライベートURLを保存するのに最適な場所です。また、公開URLはおそらくusersテーブル(ユーザーあたり1人)に保存する必要があります。

関連する問題