我有一个User
和Project
型号。用户可以拥有多个项目,项目可以拥有多个用户。当然,这与has_and_belongs_to_many
关联很简单。我的问题是我还想跟踪创建项目的用户。对于我的belongs_to :user
模型,Project
这很简单。那么问题是当用户已经与has_many :projects
建立HABTM关系时,为User
执行Project
毫无意义。
这是我最终想要实现的目标:
# 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
的创建者。
我很可能错过了一些东西。实现这一目标的常用方法是什么?
如果有助于澄清,可能的配置如下:
User
才能创建Group
User
和Group
都应该能够创建Project
我还尝试为每个关联做一个简单的has_and_belongs_to_many
,例如包括creator_id
,并自己跟踪。例如.. Project.create(:creator_id => current_user.id)
,但这似乎是hackish,我相信他们会更好地做到这一点。如果我遗漏了一些简单的东西,请为我的无知道歉。
答案 0 :(得分:1)
再次阅读本文,您希望拥有该项目的一个所有者,无论是组还是用户。将其存储为项目模型中的多态belongs_to关系。即。 owner_type =&gt; '用户'/'群组'owner_id =&gt; 123
与该群组相关联的其他用户是多对多的,因此您需要一个联接表。
您的群组模型是一个单独的模型,与用户有多对多的关系,因此您只需将创建它的用户存储为群组模型的字段,即。 :user_id 123。