można uzyskać zbiór kont, które mają więcej niż jednego użytkownika:szyny 3 Uzyskiwanie liczbę rekordów, które mają więcej niż jeden rekordy Studium (HAS_MANY)
Account.group('accounts.id HAVING count(users.id) > 1').joins(:users)
Ale, jak tylko zadzwonić. licz na ten obiekt, dostaję ogromną eksplozję:
(0,3 ms) SELECT COUNT (*) AS count_all, accounts.id HAVING count (users.id)> 1 AS account_id_having_count_users_id_1 Z "kont" INNER DOŁĄCZ "użytkownicy" NA "użytkownikach". "Account_id" = "konta". "Id" GROUP BY accounts.id HAVING count (users.id)> 1 ActiveRecord :: StatementInvalid: PG :: Błąd: BŁĄD: błąd składniowy w lub blisko "AS" LINE 1 ... unt_all, accounts.id HAVING COUNT (users.id)> 1 AS kont ...
Wydaje się, że w PostgreSQL, rzeczywista zapytanie chcę jest:
select count(*) from (SELECT accounts.id FROM "accounts" INNER JOIN "users" ON "users"."account_id" = "accounts"."id" GROUP BY accounts.id HAVING count(users.id) > 1) as a;
Jak mogę uzyskać activerecord do wygenerowania tego (lub porównywalnego) zapytania?
ale wymaga rubinowy iteracji po zbiorach i robi porównanie na każdym value-- a następnie wywołanie na to liczyć. Szukam sposobu, aby baza danych wykonała obliczenia. – patrick