我使用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
,但它引发了异常。
答案 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