有关联OrderItem的模型Order.我需要计算订单的成本,我使用以下代码:
order_items.inject{ |sum, oi| sum += oi.value }
Run Code Online (Sandbox Code Playgroud)
但结果我获得了OrderItem对象,而不是Fixnum或其他东西.我错了什么?
除非您将初始值传递给Enumerable#inject,否则将使用该集合的第一项(OrderItem在您的情况下).OrderItem += OrderItem#value根据您的问题返回OrderItem.
尝试以下操作(显式将初始值作为Fixnum传递0):
order_items.inject(0) { |sum, oi| sum + oi.value }
Run Code Online (Sandbox Code Playgroud)
正如bjhaid评论的那样,如果你处理ActiveRecord ,最好使用ActiveRecord提供的sum方法.(不需要获取记录)
OrderItem.sum('value')
Run Code Online (Sandbox Code Playgroud)