2013-04-24 10 views
5

posso ottenere la raccolta di account che hanno più di un utente:rotaie 3 ottenere il conteggio dei record che hanno più di un record associati (has_many)

Account.group('accounts.id HAVING count(users.id) > 1').joins(:users) 

Ma, non appena io chiamo. contare su quell'oggetto, ottengo una grande esplosione:

(0,3 ms) SELECT COUNT (*) AS count_all, accounts.id conteggio HAVING (users.id)> 1 AS account_id_having_count_users_id_1 DA "account" INNER JOIN "users" ON "users". "Account_id" = "account". "Id" GROUP BY accounts.id conteggio HAVING (users.id)> 1 ActiveRecord :: StatementInvalid: PG :: Errore: ERRORE: errore di sintassi in o nei pressi di "AS" LINEA 1: ... unt_all, accounts.id CHE HA count (users.id)> 1 AS conti ...

Sembra che in Postgres, la query reale che voglio è:

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; 

Come posso ottenere activerecord per generare questa (o una query comparabile)?

risposta

7

record attivo supporta 'avere' come metodo. Così si potrebbe fare la query in questo modo:

0

Perché non si tenta questo dal modello User, dove group_by l'account_id dal modello utente

User.count(:group => :account_id) Questo potrebbe restituire un hash che mostra {: ACCOUNT_ID => count_of_users} Ad esempio, {1 => 3, 2 => 5, 3 => 2}

Ora scegliere l'ACCOUNT_ID di utenti che hanno contare maggiore di 1.

+1

ma che richiede rubino iterazione sulla raccolta e facendo un confronto su ogni value-- e conta quindi chiamando su questo. Sto cercando un modo per fare il conteggio del database. – patrick

Problemi correlati