2014-03-25 49 views
2

我使用group_by_day來生成Chartkick的圖表。Rails 4:group_by_day和總和

E.g.我可以顯示一個圖表,顯示每天總訂單數:

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

我也希望有圖表,顯示每天的總訂單量(amount_gross)。這裏的問題是,amount_gross不是實際數據庫中的列,而是一個取決於增值稅的計算字段。

型號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但它引發異常。

+1

不Order.group_by_day(:created_at )以相同的方式返回一個散列ruby的group_by會? –

+0

orders.group_by {| t | t.created_at.beginning_of_day} –

+0

因爲'measure'是DB中的一個字段,所以我用'= line_chart @ data.group_by_day(:created_at).sum(:measure)'得到了它。 – Chloe

回答

0

,如果你要堅持groupdate寶石

Order.all.group_by_day(:created_at).values.flatten.map(&:amount_gross).sum 
1

排序和分組在數據庫級別上,您可以做到這一點,我認爲是更快,效率

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