【问题标题】:How can a record belong_to a single user, but also have multiple "secondary" users?一条记录怎么可能属于一个用户,但同时也有多个“次要”用户?
【发布时间】:2010-04-14 22:17:28
【问题描述】:

在我的应用中,我有一个用户模型和一个项目模型。一个用户有_许多任务,每个项目都属于_一个用户。但是随着每个项目都有一个所有者,创建它的用户,我希望所有者能够与其他人共享它(以便该项目与他们自己的帐户一起显示在其他用户的帐户上)。我想必须使用 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 =&gt; :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

【问题讨论】:

    标签: ruby-on-rails model associations


    【解决方案1】:

    以下是如何将所有者字段添加到您的 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 表中。

    【讨论】:

      【解决方案2】:

      就在我的脑海中,我认为您可能想要设置一个 ProjectShare 模型。
      ProjectShare 模型将belong_to user(共享者)、belong_to project(共享的项目)和has_many user_shared_with(只是用户模型的不同类名)

      通过这种方式,您可以查看到底是谁与谁分享了什么。 我认为你可以通过相应地命名你的模型来使用 has_many :through 情况来完成同样的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 2019-10-18
        • 1970-01-01
        相关资源
        最近更新 更多