所以我有一个用devise和Project模型创建的User模型。项目应该有一个项目所有者和项目成员。所以现在我不知道如何在模型中创建关系。
我尝试过的是我的用户模型has_many :projects
和我的项目模型belongs_to :user
,但问题是项目只附加到一个用户,所以我无法添加任何用户其他用户。
我尝试更改它以便Project has_many :users
但这会导致我的设备注册停止工作,因为用户应该属于某个项目。
我想做的其他事情是创建一个类ProjectOwner
和一个类ProjectMember
,然后设置一个项目has_many :ProjectMember
和has_one :ProjectOwner
。并设置用户has_many :ProjectMember
和has_many :ProjectOwner
,因为用户可以是许多项目中的项目所有者,而在其他项目中是项目成员。
或者我可以设置一个Project具有User类型的属性,名为ProjectOwner,另一个属性为User Array,名为ProjectMembers?
由于我对RoR很新,我不确定这种情况的正确方法是什么。
答案 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以帮助设置单表继承