记录如何归属于单个用户,还有多个“二级”用户?

时间:2010-04-14 22:17:29

标签: ruby-on-rails model associations

在我的应用中,我有一个用户模型和一个项目模型。用户具有多个分配,每个项目属于一个用户。但是,每个项目都有一个拥有者,创建它的用户,我希望所有者能够与其他人共享(这样项目就可以在其他用户的帐户中显示,并与他们自己一起显示)。我想必须使用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 个答案:

答案 0 :(得分: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列。

答案 1 :(得分:0)

我认为您可能想要设置ProjectShare模型 ProjectShare模型将属于user(共享者),belongs_to项目(正在共享的项目)和has_many user_shared_with(只是用户模型的不同类名)

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