rails activerecord范围连接查询获取连接表中不存在的记录

时间:2017-05-13 11:50:40

标签: sql ruby-on-rails activerecord

我有这个activerecord范围查询:

scope :manageable_users, -> { joins(:roles).where.not(roles: { role_name: 'admin' }) }

我希望manageable_users返回非管理员的所有用户。但是,有些用户在roles表中没有条目(即他们不是管理员,但他们也没有任何其他特殊角色)如何让查询返回这些用户呢?

1 个答案:

答案 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)