2012-09-21 9 views
10

Sono su Ruby 1.9.2, Rails 3.0.xe utilizzo DB MySQL. Ho un modello di messaggi, dove si possono postare nuovi messaggi ogni giorno.Record di gruppo sia per mese che per anno in Rails

Ho un'azione indice in cui voglio visualizzare questi messaggi raggruppati per mese e anno. Questo in pratica è usato per filtrare i messaggi.

La mia domanda si presenta così: -

@active_msgs = Messages.where('expiry > ?', Time.now).order('created_at DESC') 

ho usato la funzione group_by in Rails, dopo aver fatto riferimento a this post

mio query GROUP BY è: -

@msgs_by_month = @active_msgs.all.group_by {|u| u.created_at.month } 

ero ha restituito un hash chiamato @msgs_by_month. Questo mi ha aiutato raggruppare i messaggi per mese, ma ho bisogno di prendere in considerazione l'anno, per formare una chiave univoca, in quanto mi avrebbe aiutato a differenziare tra per esempio, settembre 2011 e settembre 2012.

La mia chiave corrente Hash [9] => per il mese di settembre, posso visualizzare tutti i valori appropriati). Come posso ottenere una chiave univoca del tipo mese, anno che posso facilmente visualizzare in loop per visualizzare tutti i record raggruppati per mese e anno di creazione.

Grazie

EDIT: -

Sto indovinando un modo per fare questo, è quello di rendere l'uso del created_at.to_date api, a condizione here . Mi chiedo solo, come posso nudo fuori il giorno da created_at.to_date per ottenere un unico mese e anno combinazione di tasti che potrebbe lavoro con la funzione group_by.

+0

possibile duplicato del [MySQL Query GROUP BY giorno/mese/anno] (http://stackoverflow.com/questions/508791/mysql-query-group-by-day-month- anno) – noodl

+0

Nah, non duplicato. il q a cui ti riferisci è solo MYSQL-related dove questo q è un rail + mysql .. – Philip

risposta

29

In SQL:

select * from messages group by year(created_at), month(created_at); 

In Rails:

Message.all.group_by { |m| m.created_at.beginning_of_month } 
+0

Grazie amico .. :). Funziona quando inserisco anche la clausola where nella query .. Solo per informazioni di tutti .. – boddhisattva

0
Message.select("date_trunc('month', created_at) as month").group("month") 
Problemi correlati