多个 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,您会很高兴拥有该模型。
我正在尝试设置具有用户模型项目模型的模型结构以及两个连接 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,您会很高兴拥有该模型。