“项目”has_many“ProjectAdmins”和许多“ProjectCollaborators”。
我已将其设置为has_many through
关系:
我的模特中的关系是否正确?列出has_many :users
两次似乎是错误的。
项目
has_many :project_admins
has_many :project_collaborators
has_many :users, through: :project_admins
has_many :users, through: :project_collaborators
用户
has_many :project_admins
has_many :project_collaborators
has_many :projects, through: project_admins
has_many :projects, through: project_collaborators
答案 0 :(得分:0)
这取决于您希望如何使用关联。
如果用户不能同时成为同一项目的协作者和管理员,您可以将这两个模型合并到一个模型中,并确定具有user_type
种类的“管理员”或“协作者”属性或具有特定角色。
在我看来,这个决定应该由您的数据驱动。
答案 1 :(得分:0)
这不起作用,因为has_many,belongs_to等方法只是将一堆读者和作者添加到您的模型中。当您尝试创建具有相同名称的关联时,将覆盖这些方法。
我会以不同的方式解决这个问题。
有几种选择。
更简单的解决方案是仅使用一个ProjectUser
模型,该模型具有role:string
(或:references
+单独的Role
模型,如果您' d喜欢保持标准化)字段到您的用户模型。添加一些便捷方法,例如#admin?
和#collaborator?
。而且你已经准备好了。
或者您可以使用STI(单表继承)。创建基类ProjectUser project:references user:references
并从中继承ProjectAdmin
和ProjectCollaborator
。或者,由于ProjectAdmin
可能始终是协作者,因此您可以从ProjectCollaborator
继承它。
基本上,两种解决方案都会给你相同的结果。但是我会说,如果您需要为不同的ProjectUser类型使用不同的方法,第二个更好。