2010-04-14 46 views
0

在我的應用程序中,我有一個用戶模型和一個項目模型。用戶has_many分配,每個項目都屬於用戶。但是,每個項目都有一個所有者,創建它的用戶,我希望所有者能夠與其他人分享(以便項目可以隨其他用戶的帳戶一起顯示)。我想象不得不使用has_many:through,並用user_id和project_id設置一個projects_users表。我想這將是最終結果?記錄如何屬於單個用戶,但也有多個「輔助」用戶?

Project.first.user 
    # The creator of the project 
    => #<User id: 1, name: 'andrew', etc...> 

Project.first.users 
    # The users that the creator chose to share it with 
    => [#<User id: 2 ...>, #<User id: 3 ...>] 

我一直工作在這一點,我創建了一個USER_ID和PROJECT_ID列SharedProject模型:

class SharedProject < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :project 
end 

我想打電話給兩個user.projects和user.shared_projects ,但我不知道如何讓shared_projects返回項目記錄,而不是來自shared_projects表中的記錄。我不能做has_many :projects, :through => :shared_projects,因爲那樣我就無法返回用戶創建的項目。

class User < ActiveRecord::Base 
    has_many :projects # Calling user.projects returns the projects that user created 
    has_many :shared_projects # How to get user.shared_projects to return project records? 
end 

回答

2

以下說明如何將所有者字段添加到Project模型,然後將擁有的項目集合添加到User模型。您可以使用您已有的共享項目部分。

class User < ActiveRecord::Base 
    has_many :owned_projects, :class_name => 'Project', :foreign_key => 'owner_id' 
end 
class Project < ActiveRecord::Base 
    belongs_to :owner, :class_name => 'User' 
end 

你需要一個owner_id列添加到您的projects表。

0

就在我頭頂,我想你可能想要建立一個ProjectShare模型。
的ProjectShare模式將belong_to用戶(共享者),belong_to項目(該項目被共享)和的has_many user_shared_with(只是一個不同的類名的用戶模型)

這種方式,您可以看到究竟是誰分享瞭如何處理誰。 我認爲你可以用has_many完成同樣的事情:通過相應地命名你的模型。

相關問題