用户和项目关系

User and Project relationship

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

我尝试过的是在我的用户模型 has_many :projects 和我的项目模型 belongs_to :user 中,但问题是该项目仅附加到一个用户,所以我不能添加任何其他用户。

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

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

或者我是否可以只设置一个项目具有一个名为 ProjectOwner 的用户类型的属性和另一个名为 ProjectMembers 的用户数组类型的属性?

由于我对 RoR 还很陌生,所以我不确定这种情况的正确方法是什么。

您想要用户、角色(STI 的 ProjectOwner 和 ProjectMember)和项目

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 以帮助设置单一 table 继承