我正在尝试设置具有User model Project模型的模型结构以及设置为has_many的两个连接表来管理Project,ProjectManagers和ProjectMembers的两个特定方面。
我可以设置两个has_and_belongs_to_many,但它并不感觉很困难。
现在,这就是我所拥有的,而且我不确定如何继续使用多个has_many到(项目经理,项目成员)都引用用户模型。
即使项目经理不会总是成为项目用户表的一部分,嵌套是否仍然可行?
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
答案 0 :(得分:1)
我没有看到你正在做什么的任何问题。还有其他选择,但这种方法应该按照您的意愿工作。你试过吗?我会做这样的事情。
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
另一种方法,因为连接表类似,所以将它们子类化并将类型列添加到连接表中。不一定比你正在做的更好。
您还可以创建project_users表(不要将成员和经理分开)并包含“角色”列。 project_user.rb上的范围会带回经理或成员。
就个人而言,我会采用你的方法。经理可能会有不同的身份验证并与其他对象建立关系。查询更简单,不太可能犯错误。
并且,我不建议使用has_and_belongs_to_many
,您可能会在连接表中添加其他列,并且您会很高兴您拥有该模型。