我也有返回用户有权访问的项目列表的范围。他们要么在参与者名单上,要么拥有他们列出的项目。查询工作正常,但它不是 SQL 安全的。我不知道如何使 JOIN 安全。where 子句是安全的,但尝试与 join 相同的操作不起作用。我似乎在这里找不到文档或答案。猜我错过了一些基本的东西。
scope :manageable_by_user, lambda { |user|
joins("LEFT JOIN participants ON
participants.project_id = projects.id
AND participants.user_id = #{user.id}").
where("projects.user_id = ? OR projects.user_id IS NOT NULL",user.id)
}