有带有关联 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/

10-13 02:19