2010-03-29 23 views
0

我所試圖做的是一種像這樣:創建在軌多重關係具有相同的數據類型

我有數據類型「用戶」和「文章」的實例。我想要在這兩者之間建立聯繫,但方式不止一種。

因此,例如,我想讓用戶「喜歡」或「書籤」一篇文章。所以我需要在數據庫中有兩個關係,一個是喜歡這篇文章的用戶,另一個是關於用戶書籤的關係,所以例如創建一個「user_article」表將不夠用,正確嗎?

這樣做的最好方法是什麼?

回答

0

你所描述的是「數據模型」而不是「數據類型」。數據類型=字符串,整數等。如果它是一個活動記錄對象,它更具體地是一個數據模型或一個活動記錄模型。

Eimantas指出你描述的是2個「has_many」關係,但不是寫在他的文章中的「have_many」。在他的例子中,書籤被稱爲連接模型。記住你可以在連接模型中放置其他東西,並使用它們之間的關係來完成任務。假設你想要一個書籤順序或者一個最喜歡的排名 - 這個連接模型就是這個主意。

精簡例如:

class Article < ActiveRecord::Base 
    has_many :users, :through => :user_bookmarks 
end 

class UserBookmark < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :article 
end 

class User < ActiveRecord::Base 
    has_many :user_bookmarks 
    has_many :articles, :through => :user_bookmarks 
end 

事情看得到了基礎知識後: 計數器緩存 - 如果你正在做計數他們是你的朋友。

僅僅使用這兩個連接模型可能會更容易和更乾淨,而不是試圖潛入多態現在。在啓動並運行後,您可以繼續探索。

0

我建議Bookmarking模型有bookmarking_type(注意type是保留給RoR)。那麼你可以has_many :bookmarkingshas_many :liked_articles, :through => :bookmarkingshas_many :bookmarks, :through => :bookmarkings。當然,你應該添加條件或者只是將SQL加入到這些關聯中,但都應該是好的。我相信甚至有插件,只是不記得atm的名字。

+1

好吧,所以我創建一個新的數據類型只用於關係?我會給它一個鏡頭! – Lowgain 2010-03-29 20:04:07

+0

這是「has_many」而不是「have_many」 – Nick 2010-03-30 16:14:46

+0

謝謝,尼克,固定!雖然我確實試着用句子流。) – Eimantas 2010-03-31 07:01:02

相關問題