【问题标题】:Rails HABTM and belongs_to for associating users/projectsRails HABTM 和 belongs_to 用于关联用户/项目
【发布时间】:2011-06-27 10:14:15
【问题描述】:

我有一个 UserProject 模型。一个用户可以有多个项目,一个项目可以有多个用户。使用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
    • UserGroup 都应该能够创建Project

我还尝试为每个关联做简单的has_and_belongs_to_many,例如包括creator_id,并自己跟踪。例如..Project.create(:creator_id =&gt; current_user.id) 但这看起来很老套,我相信他们会是一个更好的方法来做到这一点。如果我遗漏了一些简单的东西,请为我的无知道歉。

【问题讨论】:

    标签: ruby-on-rails associations has-and-belongs-to-many


    【解决方案1】:

    再次阅读本文,您希望拥有一个项目所有者,可以是组或用户。将其存储为项目模型中的多态 belongs_to 关系。 IE。 owner_type => '用户'/'组' owner_id => 123

    与该组关联的其他用户是多对多的,因此您需要一个联接表。

    您的组模型是一个单独的模型,与用户具有多对多关系,因此您可以简单地将创建它的用户存储为组模型的字段,即。 :user_id 123.

    【讨论】:

    • 嗨,马克,感谢您的回答。我认为您对我的需要是正确的,我一直在寻找更多具体的答案,因为我对这 3 个模型之间的关系有些困惑,Ryan 使用 2 个模型,它们的关系有些不同。我今天就给它看看有没有人回答。再次感谢
    • 看看我的编辑。对不起,但我想我之前在浏览你的问题时把你引向了错误的道路。如果你有什么不明白的,请告诉我。多态性可能需要一些解释,所以上面有一个 railscast railscasts.com/episodes/154-polymorphic-association
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多