2011-06-27 51 views
2

我有UserProject模型。一個用戶可以有多個項目,而一個項目可以有多個用戶。這當然很簡單,has_and_belongs_to_many關聯。我的問題是我也想跟蹤創建項目的用戶。對於我的Project模型,這將很簡單,belongs_to :user。然後問題是,當用戶與Project已經有HABTM關係時,爲User做一個has_many :projects沒什麼意義。Rails HABTM和belongs_to用於關聯用戶/項目

下面是我最終想實現:

# building a project with the currently logged in user 
current_user.projects.build(...) 

# now when a user wants to add another user to this project 
project = current_user.projects.find(...) 
project.users << User.find(...) 

# grabbing information 
some_project.user #=> The user who created this project 
some_project.users #=> The array of User objects associated 
some_user.projects #=> The array of Project objects associated 

在將來很可能一個User將具有相同的排序關係與Group,其中User會都有很多和屬於多個組。但是我也想跟蹤Group創建者

這很可能是我錯過了一些東西。實現這一目標的常用方法是什麼?

如果它有助於澄清,可能的配置佈局如下:

  • 集團
    • has_and_belongs_to_many:用戶
    • belongs_to的:用戶
    • 的has_many:項目
    • 只有User應該有能力創建一個Group
  • 用戶
    • has_and_belongs_to_many:組
    • 的has_many:項目
    • 能極大的一組或一個項目,也可以同時屬於
  • 項目
    • has_and_belongs_to_many:用戶
    • belongs_to:group
    • 既是UserGroup應該創建一個Project

的能力,我也嘗試做每個關聯簡單has_and_belongs_to_many和包括creator_id例如,這種跟蹤自己。例如.. Project.create(:creator_id => current_user.id)但這看起來很駭人,我確信他們會是一個更好的方式來做到這一點。如果我錯過了一些簡單的東西,對我的無知抱歉。

回答

1

再讀一遍,您希望擁有項目的一個所有者,無論是組還是用戶。將其存儲爲項目模型中的多態belongs_to關係。即。 owner_type =>'User'/'Group'owner_id => 123

與該組關聯的其他用戶多對多,因此您需要一個連接表。

你的組模型是一個與用戶有多對多關係的獨立模型,因此你可以簡單地將創建它的用戶存儲爲組模型的字段,即。 :user_id 123.

+0

嗨馬克,謝謝你的回答。我認爲你對我所需要的是正確的,我正在尋找更多的具體答案,因爲我對這三種模型之間的關係有點困惑,瑞恩使用2,他們的關係有點不同。我今天會給它看看是否有其他人回答。再次感謝 –

+0

看看我的編輯。對不起,但我想我以前在你瀏覽你的問題時,已經把你引向了錯誤的道路。如果你什麼都不懂,請告訴我。多態性可能需要一些解釋,所以有一個railscast它http://railscasts.com/episodes/154-polymorphic-association – mark

+0

啊,謝謝馬克,這就是我一直在尋找! –

相關問題