2010-11-25 29 views
-1

這主要是一個理論上的問題,但只是想確保我做得正確。考慮一個Ruby Rails項目,其中有兩個模型,一個是User,另一個是Alliance。紅寶石Rails的數據庫關係 - 一對多

用戶只能有一個聯盟。 一個聯盟可以有很多用戶。

這非常簡單:has_many :: belongs_to關係。

不過,我覺得使用中間模型是更好的方法。這將是:has_many:through:users_alliances,其中users_alliances將是一箇中間模型。

您認爲最好的方法是什麼?

回答

2

不要使用habtm,它不會使連接成爲完全成熟的模型,這正是您所需要的。在聯盟方面使用has_many:through,在用戶方面使用has_many:through。

User 
    has_one :alliance_membership 
    has_one :alliance, :through => :alliance_membership 

AllianceMembership 
    belongs_to :user 
    belongs_to :alliance 

Alliance 
    has_many :alliance_memberships 
    has_many :users, :through => :alliance_memberships 

我個人更喜歡班級名稱AllianceMembership UserAlliance,但你可以使用。雖然imo,UsersAlliances很醜。 (has_many/one的另一個優點是:無論你想要什麼,你都可以調用連接表/類)。

如果您願意,這可以讓您隨後輕鬆更改爲擁有多個聯盟的用戶。

0

你爲什麼這麼想?你認爲你會從聯合模式中獲得什麼?

就我個人而言,我懷疑額外的表格/模型會有幫助,除非您認爲一對多將在未來成爲多對多。

+0

這個想法是,一些指向聯盟用戶的信息應該存儲在那裏。例如,聯盟中用戶的排名,我認爲最好能成爲聯合表的一部分。我認爲這更明確。 – Spyros 2010-11-25 09:50:54

+0

你有一點。那也是如何在魔獸世界爲公會完成的。在這裏尋找表格公會和公會成員:https://github.com/mangos/mangos/blob/master/sql/characters.sql – Vojto 2010-11-25 10:09:12