用户和项目关系
User and Project relationship
所以我有一个用 devise 创建的用户模型和一个项目模型。一个项目应该有一个项目所有者和项目成员。所以现在我不知道如何在我的模型中创建关系。
我尝试过的是在我的用户模型 has_many :projects
和我的项目模型 belongs_to :user
中,但问题是该项目仅附加到一个用户,所以我不能添加任何其他用户。
我尝试更改它以便项目 has_many :users
但这会导致我的设备注册停止工作,因为用户应该属于一个项目。
我想做的其他事情是创建一个 class ProjectOwner
和一个 class ProjectMember
然后设置一个项目 has_many :ProjectMember
和 has_one :ProjectOwner
。并设置用户 has_many :ProjectMember
和 has_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 继承
所以我有一个用 devise 创建的用户模型和一个项目模型。一个项目应该有一个项目所有者和项目成员。所以现在我不知道如何在我的模型中创建关系。
我尝试过的是在我的用户模型 has_many :projects
和我的项目模型 belongs_to :user
中,但问题是该项目仅附加到一个用户,所以我不能添加任何其他用户。
我尝试更改它以便项目 has_many :users
但这会导致我的设备注册停止工作,因为用户应该属于一个项目。
我想做的其他事情是创建一个 class ProjectOwner
和一个 class ProjectMember
然后设置一个项目 has_many :ProjectMember
和 has_one :ProjectOwner
。并设置用户 has_many :ProjectMember
和 has_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 继承