TypeError: no implicit conversion of Array into Integer Rails 4.2

TypeError: no implicit conversion of Array into Integer Rails 4.2

我正在 rails 中构建一个购物车应用程序。 CartItems 模型有一个整数类型的数量列和一个小数类型的 cart_price 列。对于添加到购物车的每个项目,都会向数据库添加一个新行 模型名称 CartItems。控制器获取数量和价格成功。但是当乘法时,我收到上面的错误消息。一旦乘法有效,我想将产品加在一起以获得购物车的小计。

def subtotal
  @cart_content = @cart_item.pluck(:quantity,:cart_price)
  @subtotal = @cart_content.inject(:*)
end

当我从 @subtotal 中删除 .inject(:*) 时,控制器会检索到正确的数据。

两个产品的视图输出示例,其中包含数量和价格值

[[3, #BigDecimal:7fc9a9b2d980,'0.1285E3',18(36)>], [1, # BigDecimal:7fc9a9b2d7c8,'0.115E3',9(27)>]]

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

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

您最好向已包含 quantity * cart_price # name it row_total

值的模型添加一列

然后您可以像这样轻松地对新列求和:

ModelName.sum(:row_total)

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

扩展他的回答,我建议将 inject 替换为以下内容,因为(至少对我而言)它更能描述(我认为)您想对代码执行的操作:

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