Rails 4:group_by_day和sum

时间:2014-03-25 10:07:39

标签: ruby-on-rails group-by

我使用group_by_day生成Chartkick图表。

E.g。我可以显示一个图表,显示每天的总订单数:

<%= line_chart Order.all.group_by_day(:created_at).count %>

我还希望图表显示每天的总订单金额(amount_gross)。这里的问题是amount_gross不是实际数据库中的列,而是取决于增值税的计算字段。

Model Order.rb

def amount_gross
  if vat
    amount_net * 1.1
  else
    amount_net
end

通常,我会得到这样的总和sum = Orders.all.map(&:amount_gross).sum

但是,我不知道如何使用group_by_date

执行此操作

我尝试了Order.group_by_day(:created_at).map(&:amount_gross).sum,但它引发了异常。

2 个答案:

答案 0 :(得分:1)

数据库级别的订购和分组更快更有效

 Order.sum('IF(vat= true,amount_net * 1.1,amount_net)',group:'day(created_at)')

答案 1 :(得分:0)

如果你想坚持使用groupdate gem

,你可以这样做
Order.all.group_by_day(:created_at).values.flatten.map(&:amount_gross).sum