mysql - 在 Rails 中按月和年对记录进行分组

标签 mysql ruby ruby-on-rails-3 group-by

我使用的是 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/

相关文章:

mysql - <ask>配置mysql和freeradius

ruby - 了解 Rails 中的路由

ruby-on-rails - 设计 sign_in_and_redirect 似乎永远不会工作

php - Plupload : Passing a session variable to upload. php 以更新数据库中的头像上传

php - 从 mysql_connect() 获取 PHP PDO 连接?

ruby - 在 Mongoid 中,您可以原子地销毁嵌入文档并更新其父文档吗?

ruby-on-rails - protected 方法 'update'调用了#<Project

ruby-on-rails - 运行测试时 has_many 通过 Factory Girl 错误

JavaScript 未在 Rails 测试环境中加载

php - 通过 CMS 在 codeIgniter 中创建动态 Controller