Problem ze zmontowaniem scope'a

Mam scope’a:

scope :with_merchant, joins(:users).where("users.role = 'merchant'")

I teraz chce zrobić jego przeciwieństwo. A więc takiego, który zwróci mi wszystkie rekordy, dla których wśród users nie ma ni jednego merchanta.

How to?

scope :with_merchant, joins(:users).where(“users.role != ‘merchant’”)
scope :with_merchant, joins(:users).where(“users.role <> ‘merchant’”)

chyba oba działaja

e ee, obydwa zwracają te rekordy, dla których choć jeden z userów nie jest merchantem. Mnie interesują takie, gdzie żaden user nie jest merchantem

Zbędna gimnastyka ze scopem. Użyj metody z where, która zadziała identycznie jak scope. Zapytanko jakie potrzebujesz to (zgaduję, bo domyślam się relacji) coś w stylu: def without_role(role) where("id IN ( SELECT DISTINCT x.id FROM secret_model x LEFT JOIN users s ON s.id = x.user_id AND s.role = '#{role}' WHERE s.id IS NULL )") end
Left join załatwia sprawę.