如何使用注入来获得一些AR集合的总和?

时间:2014-01-27 08:45:44

标签: ruby activerecord

有关联OrderItem的模型Order。我需要计算订单的成本,我使用以下代码:

order_items.inject{ |sum, oi| sum += oi.value }

但结果我获得了OrderItem对象,而不是Fixnum或其他东西。我错了什么?

1 个答案:

答案 0 :(得分:6)

除非您将初始值传递给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')