2011-06-27 109 views
0

我的場景是我有一個用戶模型,聯繫人模型和profile_url模型。需要一些關於模型關聯的幫助

以下是關聯b \ w用戶和聯繫人模式。

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。所以,如果我註冊,我會有像http://www.mysite.com/mike.fererra作爲公共網址到我的個人資料。現在,當我將您作爲聯繫人添加到我的聯繫人列表中時,您將爲我的個人資料分配一個私人網址(相同的個人資料,只有一個唯一的網址給予您,只對您是私人的)。所以基本上有兩種方式或兩個網址來訪問我的個人資料,公共網址和私人網址。這很難解釋爲什麼我需要分開的網址,但只是覺得如果你想知道沒有別的辦法。

我看到這個東西的方式是通過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 

我希望是有道理的,概括地說故事圍繞着用戶和途徑訪問個人資料(公共網址爲特定於該用戶只,每個聯繫人的接觸世界,私人網址的個人資料將具有與該聯繫人所屬用戶的相同簡檔的唯一私人網址)。個人資料表有一個類型,user_id,contact_id,url字段。我不知道這是否是處理這種情況的最好方法,但如果你能在這種情況下幫助我,那將是一件好事。

回答

1

只要user has_many :contacts, :through=> :user_contacts在我看來,user_contacts是存儲用戶聯繫人列表中每個聯繫人的私人網址的最佳位置。公開網址應該可以存儲在users表中(每個用戶一個)。