我使用的是 Ruby 1.9.2、Rails 3.0.x,我使用的是 MySQL 数据库。我有一个消息模型,每天都可以在其中发布新消息。
我有一个索引操作,我想在其中显示按月份和年份分组的这些消息。这基本上用于过滤消息。
我的查询是这样的:-
@active_msgs = Messages.where('expiry > ?', Time.now).order('created_at DESC')
引用this post后,我在Rails中使用了group_by函数
我的分组查询是:-
@msgs_by_month = @active_msgs.all.group_by {|u| u.created_at.month }
我收到了一个名为@msgs_by_month 的哈希值。这有助于我按月对消息进行分组,但我需要考虑年份,形成一个唯一的键,因为它会帮助我区分 2011 年 9 月和 2012 年 9 月。
我当前的键只有 Hash[Month] 类型(例如 Hash[9] => 表示九月,我可以显示所有适当的值)。我怎样才能获得类型为月、年的唯一键,我可以轻松循环显示按创建月份和年份分组的所有记录。
谢谢
编辑:-
我猜测一种方法是使用 created_at.to_date
api,提供 here
.我只是想知道,如何从 created_at.to_date
中去掉日期 以获得唯一 月份和年份组合键 可以使用 group_by 函数。
最佳答案
在 SQL 中:
select * from messages group by year(created_at), month(created_at);
在 Rails 中:
Message.all.group_by { |m| m.created_at.beginning_of_month }
关于mysql - 在 Rails 中按月和年对记录进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526161/