2012-09-21 78 views
10

我在Ruby 1.9.2上,Rails 3.0.x和我使用MySQL DB。我有一個消息模型,每天可以發佈新消息。在Rails中按月和按年分組的記錄

我有一個索引操作,我希望顯示按月份和年份分組的這些消息。這基本上用於過濾消息。

我的查詢如下所示: -

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

我以前在軌GROUP_BY功能,指的是this post

我GROUP BY查詢後: -

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

我返回了一個名爲@msgs_by_month的Hash。這幫助我按月對消息進行分組,但我需要考慮到年,以形成一個獨特的密鑰,因爲這將有助於區分例如2011年9月和2012年9月。

我當前的密鑰只有類型散列[月](例如9月的散列[9] =>,我可以顯示所有適當的值)。我怎樣才能得到一個類型月,年的獨特的關鍵,我可以很容易地循環顯示按月份和年份創建的所有記錄。

謝謝

編輯: -

我猜這樣做的一種方式,是利用created_at.to_date API,提供here 。我只是在想,我怎麼能created_at.to_date剔除一天得到獨特個月和年組合鍵可能與GROUP_BY功能工作。

+0

的可能重複[MySQL查詢GROUP BY日/月/年(http://stackoverflow.com/questions/508791/mysql-query-group-by-day-month-年) – noodl

+0

Nah,不重複。你指的q只是MYSQL相關的,這裏q是一個rails + mysql .. – Philip

回答

29

在SQL:

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

在Rails:

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

謝謝兄弟.. :)。它在我將where子句也輸入到查詢中時起作用..僅供所有信息.. – boddhisattva

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