ruby-on-rails - ruby 如何按给定日期分组

标签 ruby-on-rails ruby ruby-on-rails-4

我想每天查找注册计数,日期范围为本月。所以

starts_at = DateTime.now.beginning_of_month
ends_at = DateTime.now.end_of_month

dates = ((starts_at.to_date)..(ends_at.to_date)).to_a
dates.each_with_index do |date,i|
    User.where("created_at  >= ? and created_at <= ?", date, date.tomorrow)
end

如此接近 30 个查询运行,如何避免运行 30 个查询并在单个查询中完成?

我需要类似的东西

group_by(:created_at)

但是在 group by 中,如果没有特定日期的数据,它什么也不显示,但我需要日期并计为 0

我遵循了这个:

How do I group by day instead of date?

def group_by_criteria
  created_at.to_date.to_s(:db)
end

User.all.group_by(&:group_by_criteria).map {|k,v| [k, v.length]}.sort

输出

[["2016-02-05", 5], ["2016-02-06", 12], ["2016-02-08", 6]]

没有 2016-02-05 的数据,因此它应该包含在计数 0 中

最佳答案

目前我无法对其进行测试,但应该可以过滤您的日期范围并在您的 dbms 的帮助下对其进行分组,如下所示:

User.select('DATE(created_at)').where("created_at >= ? and created_at <= ?", DateTime.now.beginning_of_month, DateTime.now.end_of_month).group('DATE(created_at)').count

关于ruby-on-rails - ruby 如何按给定日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35291739/

相关文章:

ruby-on-rails - 如何使用 Minitest 测试交互器管理器

ruby-on-rails - 库未加载 :/usr/local/opt/readline/lib/libreadline. 6.dylib (LoadError)

ruby-on-rails - Nginx可以用作后端Websocket服务器的反向代理吗?

javascript - 在我的命名空间中使用 socket.io

ruby-on-rails - 在 rspec 中通过 post 请求传递图像(回形针)

java - 最简单/最简单的浏览器游戏引擎是什么?

ruby-on-rails - 在 Shopify 中使用 ActiveMerchant 进行 Paypal Express Checkout

ruby - 如何在不滚动的情况下写入 shell?

ruby - 在 Ruby 中实现贝叶斯分类器?

ruby-on-rails - 如何传递 simple_form 隐藏字段参数来创建操作