有关联OrderItem的模型Order。我需要计算订单的成本,我使用以下代码:
order_items.inject{ |sum, oi| sum += oi.value }
但结果我获得了OrderItem对象,而不是Fixnum或其他东西。我错了什么?
答案 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')