2013-04-24 12 views
5

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?

Odpowiedz

7

aktywnego obsługuje zapis 'o' jako metody. Więc można zrobić zapytanie w ten sposób:

0

Dlaczego nie spróbować tego z modelu użytkownika, gdzie group_by się ACCOUNT_ID od modelu użytkownika

User.count(:group => :account_id) To może powrócić hash pokazując {: ACCOUNT_ID => count_of_users} Na przykład {1 => 3, 2 => 5, 3 => 2}

teraz wybrać ID_konta, że ​​mają liczbie użytkowników większy niż 1.

+1

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

Powiązane problemy