ruby-on-rails - group_by 之后的 ruby​​ on rails 求和字段

标签 ruby-on-rails ruby postgresql rails-activerecord

在我开始之前,我只想告诉你,我尝试了一些类似主题的方法,但它们对我的情况并不适用。

我有按天分组的订单(使用 group_by(&:created_at) 方法)。现在我想对特定日期的订单中的“总计”字段求和。它应该看起来像这样: 2015 年 5 月 21 日 总计:215(订单 1 总计 = 200,订单 2 总计 = 15) 2015 年 5 月 22 日 总计:0 2015 年 5 月 23 日 总计:321

我试过这样的

orders.to_a.map { |h| h[:total] }.sum 
orders.to_a.inject { |sum, h| sum += h[:total] }

但它只打印每个订单的总计(不是每日总和)。

我像这样从数据库(postgres)中获取数据:

  @orders = current_user.orders.where(created_at: Time.now.beginning_of_month.. Time.now).group_by(&:created_at)

结果我得到了这样的结果:

    {Sat, 06 Jun 2015 13:06:08 CEST +02:00=>
[#<Order id: 19, total:10], 
[#<Order id: 20, total:12], 
Fri, 05 Jun 2015 15:42:24 CEST +02:00=>
[#<Order id: 19, total:10], 
[#<Order id: 20, total:12]}

@pauloancheta 使用您的解决方案并拥有这样的 View (HAML)

#subtotal
  - @orders.each do |day,orders|
    .col-md-4
      %h2
        = day.strftime("%Y  %m %d")
        = link_to '', monthly_summary_path(date: day), class: "btn btn-info btn-small glyphicon glyphicon-zoom-in"
      %p= "sum: #{orders.map(&:total).sum}"

当我一天有两个订单时,我会得到两个单独的列,而不是 1 个带总和的列。

最佳答案

首先,created_at 是时间戳而不是日期,因此您根本没有按日期分组,而是按日期 时间分组。这就是为什么您会在某些日期获得多个结果。

其次,您可以通过在日期上使用 GROUP BY 然后对每个组中的 total 求和来让数据库完成所有工作:

current_user.orders
            .where(created_at: Time.now.beginning_of_month .. Time.now)
            .group('created_at::date')
            .sum(:total)

这会给你一个像这样的哈希:

{ date_object => sum_for_that_date, ... }

关于ruby-on-rails - group_by 之后的 ruby​​ on rails 求和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30685334/

相关文章:

ruby-on-rails - 转义 ruby​​ 字符串中的特殊字符以匹配 Salesforce SOQL 要求

ruby-on-rails - 监视ROR服务器(瘦或杂种)在WINDOWS中的资源和可用性并重新生成

ruby - 在 Ruby 中使用 2 个助手构造函数的惯用方法

sql - PostgreSQL 选择语句

postgresql - 为什么 <@> 没有在 Postgresql 中返回正确的距离?

ruby-on-rails - 带有 View 测试和嵌套资源的 Rspec 和 Rails

javascript - Jquery 文件上传/Rails - 文件被提交两次,一次是为了正确的 url,一次是为了当前的 url

ruby - 启动 Knife 配置命令时出错

ruby-on-rails - RSpec 请求警告 - Rails 5.1 升级 - Assets 管道中不存在 Assets

mysql - 我是否需要一个针对具有 20 多个属性的模型的搜索引擎