有模型Order with association OrderItem。我需要計算訂單的成本,我用它下面的代碼:如何使用注入來獲得一些AR收集的總和?
order_items.inject{ |sum, oi| sum += oi.value }
但作爲結果我得到OrderItem的對象,而不是Fixnum對象或別的東西。我錯了什麼?
有模型Order with association OrderItem。我需要計算訂單的成本,我用它下面的代碼:如何使用注入來獲得一些AR收集的總和?
order_items.inject{ |sum, oi| sum += oi.value }
但作爲結果我得到OrderItem的對象,而不是Fixnum對象或別的東西。我錯了什麼?
除非您將初始值傳遞至Enumerable#inject
,否則將使用該集合的第一項(您的情況爲OrderItem
)。根據你的問題,OrderItem += OrderItem#value
會返回OrderItem。
試試下面的(明確地傳遞初始值作爲Fixnum對象0
):
order_items.inject(0) { |sum, oi| sum + oi.value }
由於bjhaid評論說,這是更好地使用,如果你處理的ActiveRecord的ActiveRecord sum
method。 (不需要獲取記錄)
OrderItem.sum('value')
值爲一個Integer或Float或Bignum,那麼你應該使用ActiveRecord ['SUM'](http://apidock.com/ rails/ActiveRecord/Calculations/ClassMethods/sum) – bjhaid