多个 has_many 通过使用相同的模型 rails

multiple has_many through with the same model rails

我正在尝试设置具有用户模型项目模型的模型结构以及两个连接 tables 设置为 has_many 通过管理项目的两个特定方面,ProjectManagers 和项目成员。

我可以设置两个 has_and_belongs_to_many 但感觉不太好。

现在,这就是我所拥有的,我不确定如何继续使用多个 has_many 通过(项目经理,项目成员)都引用用户模型。

即使项目经理并不总是项目用户的一部分,嵌套遍历是否可行?table?

project.rb

class Project < ApplicationRecord
  has_many :project_members
  has_many :users, through: :project_manager
end

user.rb

class User < ApplicationRecord
  has_many :project_managers
  has_many :users, through: :project_managers
end

project_manager.rb

class ProjectManager < ApplicationRecord
    belongs_to :project
    belongs_to :user
end

project_member.rb

class ProjectMember < ApplicationRecord
  belongs_to :project
  belongs_to :user
end

我没有发现您所做的有任何问题。还有其他选择,但这种方法应该可以如您所愿。你试过了吗?我会做这样的事情。

class Project < ApplicationRecord
  has_many :project_members
  has_many :project_managers

  has_many :members, through: :project_members, :class_name => User.to_s
  has_many :managers, through: :project_manager, :class_name => User.to_s
end

由于连接 table 相似,另一种方法是对它们进行子类化并向连接 table 添加一个类型列。不一定比你做的更好。

您还可以创建一个 project_users table(不要将成员和管理员分开)并包含一个 "role" 列。 project_user.rb 的范围将带回经理或成员。

就我个人而言,我会同意你的方法。管理器可能具有不同的身份验证并与其他对象有关系。查询更简单,更不容易出错。

而且,我不推荐 has_and_belongs_to_many,您可能会向联接添加其他列 table,您会很高兴拥有该模型。