2017-05-13 1 views
0

Ich habe diese Active Umfang query:Schienen Active Umfang join Abfrage Datensätze erhalten, die nicht beitreten Tabelle existieren in

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

wo ich manageable_users wollen alle Benutzer zurückgeben, die nicht Administratoren sind. Einige Benutzer haben jedoch keine Einträge in der Tabelle roles (d. H. Sie sind keine Administratoren, haben aber auch keine anderen speziellen Rollen.) Wie bekomme ich die Abfrage, um auch diese Benutzer zurückzugeben?

Antwort

2

Standardmäßig führen Joins in Rails einen INNER JOIN durch.

Für Ihren Anwendungsfall, in dem sich die Benutzer selbst holen, wenn sie Wert nicht in Rollen zugeordnet haben, verwenden Sie LEFT OUTER

User.joins("LEFT OUTER JOIN roles on roles.user_id = users.id") 

In Rails 5 Sie tun können JOIN:

User.left_outer_joins(:roles) 
Verwandte Themen