有带有关联 OrderItem 的模型 Order。我需要计算订单的成本,并使用以下代码:
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')
关于ruby - 如何使用注入(inject)来获取一些 AR 集合的总和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21376341/