2011-11-08 13 views
8

io sto cercando di fare la seguente istruzione SQL in rotaie:Rails 3.1 - trovare usando conteggio e seleziono come

SELECT COUNT(downloads.title) AS total, downloads.title FROM `downloads` WHERE `downloads`.`member_id` = 60 Group by `downloads`.`title` 

Ho scritto questo in rotaie in questo modo:

Download.where(:member_id => id).select("COUNT(downloads.title) AS total, downloads.title").group(:title) 

Se corro il interrogando direttamente dal server sql, lo sql viene eseguito correttamente ma se eseguo la versione di activerecord ottengo solo il titolo indietro.

Ho pensato che questo potrebbe essere causa di attr_accessible ma questo non sembra aver fatto la differenza.

qualche idea?

+0

è possibile controllare query SQL finale con 'metodo to_sql'. – Bohdan

+0

Grazie, questo è un metodo pratico ma lo sql emesso è come mi aspettavo, ma non riesco a capire perché non include il totale nell'oggetto emesso – Alex

risposta

16

Hai provato a chiamare il metodo total sull'oggetto di raccolta?
Questa informazione non è inclusa nell'output per oggetto usando il metodo to_s, quindi probabilmente non lo vedi, ma il valore totale è lì.

downloads = Download.where(:member_id => id).select("COUNT(downloads.title) AS total, downloads.title").group(:title) 
downloads.first.total 
+0

Grazie, completamente dimenticato .inspect non restituisce tutti i campi! – Alex

+0

Grazie. È helful per me. –