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?
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ę.