Ruby on rails TypeError:没有将数组隐式转换为整数Rails 4.2

Ruby on rails TypeError:没有将数组隐式转换为整数Rails 4.2,ruby-on-rails,ruby-on-rails-4.2,Ruby On Rails,Ruby On Rails 4.2,我正在rails中构建一个购物车应用程序。CartItems模型有一列表示整数类型的数量,一列表示十进制类型的购物价格。对于添加到购物车的每个项目,都会向数据库添加一个新行 型号名称为CartItems。控制器成功检索数量和价格。但是当我乘的时候,我收到了上面的错误信息。一旦乘法运算成功,我想把产品加在一起,得到购物车的小计 def subtotal @cart_content = @cart_item.pluck(:quantity,:cart_price) @subtotal = @

我正在rails中构建一个购物车应用程序。CartItems模型有一列表示整数类型的数量,一列表示十进制类型的购物价格。对于添加到购物车的每个项目,都会向数据库添加一个新行 型号名称为CartItems。控制器成功检索数量和价格。但是当我乘的时候,我收到了上面的错误信息。一旦乘法运算成功,我想把产品加在一起,得到购物车的小计

def subtotal
  @cart_content = @cart_item.pluck(:quantity,:cart_price)
  @subtotal = @cart_content.inject(:*)
end
当我从@subtotal中删除.inject(:*)时,控制器将检索正确的数据

显示数量和价格值的两种产品的视图输出示例

[3,#大十进制:7FC9B2D980,'0.1285E3',18(36)>,[1,#大十进制:7FC9B2D7C8,'0.115E3',9(27)>]


我不是100%确定,但您可能想要实现的是:


@cart|u content.sum{| c | c.inject(:*)}
-单一reduce将不起作用,因为它需要的是一个数字而不是数组

您最好在模型中添加一列,该列已经包含
数量*cart|u价格#将其命名为row_total

然后您可以很容易地对新列求和,如下所示:


ModelName.sum(:row\u total)

您似乎试图将单个元素相乘,ruby不喜欢这些元素,因为它们本身就是数组。 正如djaszczurowski所建议的,我建议在元素相乘后对数组求和

根据他的回答,我建议用以下内容替换inject,因为(至少对我来说)它更能描述(我认为)您希望对代码做什么:

@subtotal = @cart_content.sum { |count, price| count * price }

您能否编辑您的问题以包含设置
@cart\u item
的代码?感谢您的回复此代码有效,下面的Christian Schwartz回复也有效。从性能的角度来看,实施这两个解决方案中的一个会比实施另一个更好吗?可能Christian的解决方案会快一点。但是,最好将计算值保留在db中(用户刷新页面时不进行计算,购物车更改状态时重新计算值),可以创建一个数据库列,在向购物车添加新项目时自动计算数据库中的“row_total”吗,或者我需要在控制器中计算“row_total”,然后将其与数量和cart_price一起传递到数据库以创建新行吗?手动计算并将结果存储在total_price中,下面是一个示例代码,您可以实现它。感谢您的响应。此代码有效,上面的@djaszczurowski响应也有效。从性能角度来看,实施这两个解决方案中的一个会比实施另一个更好吗?我认为这两个解决方案中的任何一个都没有任何特定的性能优势,如果您真的想确定,您必须对其进行基准测试。