【发布时间】:2011-06-27 10:14:15
【问题描述】:
我有一个 User 和 Project 模型。一个用户可以有多个项目,一个项目可以有多个用户。使用has_and_belongs_to_many 关联当然很简单。我的问题是我还想跟踪创建项目的用户。对于我的Project 模型,使用belongs_to :user 会很简单。那么问题是,当用户已经与Project 建立HABTM 关系时,为User 执行has_many :projects 几乎没有意义。
这是我最终想要实现的目标:
# 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 :users
- belongs_to :user
- has_many :projects
- 只有
User才能创建Group
- 用户
- has_and_belongs_to_many :groups
- has_many :projects
- 可以伟大的团体或项目,也可以同时属于两者
- 项目
- has_and_belongs_to_many :users
- belongs_to :group
-
User和Group都应该能够创建Project
我还尝试为每个关联做简单的has_and_belongs_to_many,例如包括creator_id,并自己跟踪。例如..Project.create(:creator_id => current_user.id) 但这看起来很老套,我相信他们会是一个更好的方法来做到这一点。如果我遗漏了一些简单的东西,请为我的无知道歉。
【问题讨论】:
标签: ruby-on-rails associations has-and-belongs-to-many