我使用的是 Ruby 1.9.2、Rails 3.0.x,并且使用 MySQL DB。我有一个消息模型,每天都可以发布新消息。
我有一个索引操作,我想在其中显示按月份和年份分组的这些消息。这主要用于过滤消息。
我的查询如下所示:-
@active_msgs = Messages.where('expiry > ?', Time.now).order('created_at DESC')
我在Rails中使用了group_by函数,参考后这个帖子 https://stackoverflow.com/questions/902974/grouping-by-week-month-etc-activerecord
我的分组查询是:-
@msgs_by_month = @active_msgs.all.group_by {|u| u.created_at.month }
我收到了一个名为@msgs_by_month 的哈希值。这帮助我按月对消息进行分组,但我需要考虑年份,形成唯一的密钥,因为它可以帮助我区分例如 2011 年 9 月和 2012 年 9 月。
我当前的密钥仅是 Hash[Month] 类型(例如 Hash[9] => 表示 9 月,我可以显示所有适当的值)。我如何获得月、年类型的唯一键,我可以轻松地循环显示按创建月和年分组的所有记录。
谢谢
EDIT:-
我猜想做到这一点的一种方法是使用created_at.to_date
api, 提供here http://api.rubyonrails.org/classes/Time.html。我只是想知道我怎样才能剔除这一天 from created_at.to_date
得到一个unique月份和年份组合键这可以使用 group_by 函数.
In SQL:
select * from messages group by year(created_at), month(created_at);
在轨道中:
Message.all.group_by { |m| m.created_at.beginning_of_month }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)