我有这个activerecord范围查询:
scope :manageable_users, -> { joins(:roles).where.not(roles: { role_name: 'admin' }) }
我希望manageable_users
返回非管理员的所有用户。但是,有些用户在roles
表中没有条目(即他们不是管理员,但他们也没有任何其他特殊角色)如何让查询返回这些用户呢?
答案 0 :(得分:2)
默认情况下,rails中的连接执行INNER JOIN。
对于您的用例,即使用户在角色中没有关联值,也要获取用户,请使用LEFT OUTER JOIN
User.joins("LEFT OUTER JOIN roles on roles.user_id = users.id")
在Rails 5中,你可以这样做:
User.left_outer_joins(:roles)