query, imansible selezionare il conteggio delle colonne

Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name') Build query: SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags` INNER JOIN `quote_tags` ON `quote_tags`.`tag_id` = `tags`.`id` GROUP BY quote_tags.tag_id ORDER BY count desc 

Risultato:

 [#, ... , #] 

Non restituisce la colonna dei conteggi per me. Come posso averlo?

Hai provato a chiamare il metodo count su uno degli oggetti Tag restituiti? Solo perché inspect non menziona il count non significa che non sia lì. L’uscita di inspect :

 [#, ... , #] 

includerà solo cose che la class Tag conosce e Tag conoscerà solo le colonne nella tabella dei tags : hai solo id e name nella tabella in modo che sia tutto ciò che vedi.

Se lo fai:

 tags = Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name') 

e poi guarda il count s:

 tags.map(&:count) 

Vedrai la serie di conteggi che ti aspetti.

Aggiornamento: la versione originale di questa risposta ha erroneamente caratterizzato la select e le versioni successive hanno finito per ripetere efficacemente la versione corrente dell’altra risposta da @muistooshort. Lo lascio nel suo stato attuale perché ha le informazioni sull’utilizzo di sql raw. Grazie a @muistooshort per aver segnalato il mio errore.

Sebbene la tua query funzioni effettivamente come spiegato dall’altra risposta, puoi sempre eseguire SQL raw come alternativa.

Esistono vari metodi di selezione tra cui scegliere, ma penso che tu voglia utilizzare select_all . Supponendo che la query di build generata implicitamente fosse corretta, puoi semplicemente usarla, come in:

 ActiveRecord::Base.connection.select_all(' SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags` INNER JOIN `quote_tags` ON `quote_tags`.`tag_id` = `tags`.`id` GROUP BY quote_tags.tag_id ORDER BY count desc') 

Vedi http://api.rubyonrails.org/classs/ActiveRecord/ConnectionAdapters/DatabaseStatements.html per informazioni sui vari metodi tra cui puoi scegliere.