【问题标题】:ruby on rails sum fields after group_bygroup_by 之后的 ruby​​ on rails sum 字段
【发布时间】:2015-08-21 12:20:11
【问题描述】:

在开始之前,我只想说明我尝试了一些类似主题的方法,但它们不适用于我的案例。

我有按天分组的订单(使用 group_by(&:created_at) 方法)。现在我想从特定日期的订单中汇总“总计”字段。它应该看起来像这样: 2015 年 5 月 21 日 总计:215(order1 总计 = 200,order2 总计 = 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 使用您的解决方案并拥有这样的视图 (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 列。

【问题讨论】:

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


    【解决方案1】:

    我在我的控制台上试过这个,它成功了。希望它也对你有用。 orders.map(&amp;:total).sum

    Order.where 已经返回一个数组,所以我认为不需要.to_a 方法。

    【讨论】:

      【解决方案2】:

      首先,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, ... }
      

      【讨论】:

      • 谢谢!我对“created_at”感到困惑,因为当我检查它的类时,它有“ActiveSupport::TimeWithZone”。我之前尝试过使用总和,但“组”不好。
      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 2016-07-04
      • 2012-05-12
      相关资源
      最近更新 更多