用户和项目关系

时间:2017-06-19 16:43:28

标签: ruby-on-rails ruby devise rails-models

所以我有一个用devise和Project模型创建的User模型。项目应该有一个项目所有者和项目成员。所以现在我不知道如何在模型中创建关系。

我尝试过的是我的用户模型has_many :projects和我的项目模型belongs_to :user,但问题是项目只附加到一个用户,所以我无法添加任何用户其他用户。

我尝试更改它以便Project has_many :users但这会导致我的设备注册停止工作,因为用户应该属于某个项目。

我想做的其他事情是创建一个类ProjectOwner和一个类ProjectMember,然后设置一个项目has_many :ProjectMemberhas_one :ProjectOwner。并设置用户has_many :ProjectMemberhas_many :ProjectOwner,因为用户可以是许多项目中的项目所有者,而在其他项目中是项目成员。

或者我可以设置一个Project具有User类型的属性,名为ProjectOwner,另一个属性为User Array,名为ProjectMembers?

由于我对RoR很新,我不确定这种情况的正确方法是什么。

1 个答案:

答案 0 :(得分:2)

看起来你想要一个用户,角色(有STI的ProjectOwner和ProjectMember)和Project

class  User < ApplicationRecord
  has_many :roles
  has_many :projects, through: :roles
end

class Role < ApplicationRecord
  belongs_to :user
  belongs_to :project

  #Code that applies to both project owners and members
end

class ProjectOwner < Role
  #project owner specific code
end

class ProjectMember < Role
  #project member specific code
end

class Project < ApplicationRecord
  has_many :project_members
  has_many :members, class_name: "User", through: :project_members
  has_one  :project_owner
  has_many :owners, class_name: "User", through: :project_owner
end

签出this article以帮助设置单表继承