我有一个 Project 模型和一个 User 模型,多对多关系。他们通过 has_many :through 用 ProjectUser 关联表来管理,在 ProjectUser 这个关联模型里,有一个 role 属性。
我的需求是:在查询 A 用户的所有 Projects 的时候,能同时获取到 A 用户对应某 Project 的 role 值。 目前我是这样查询的:
@projects = Project.includes(:project_users).where(:project_users => { :user_id => current_user.id } ).where('projects.updated_at > ?', someTime).where(deleted_at: nil)
这样取出来的 project 数据里就只会有一个当前用户的 project_user 记录,然后我就可以通过 project.project_users[0].role 去获取当前用户对于这个项目的权限了。而不需要再查找一遍 ProjectUser 表。
json.projects @projects do |project|
json.id project.id
json.name project.name
json.role project.project_users[0].role
end
但总觉得这样的查询貌似有点怪,执行的 sql 也非常的长以及复杂。
请教,是否有更好的办法来实现这个需求?