我正在使用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)>]
答案 0 :(得分:1)
我不是百分百确定,但你可能希望实现的目标是:
@cart_content.sum { |c| c.inject(:*) }
- 单个reduce不起作用,因为它需要一个不是数组的数字
答案 1 :(得分:0)
您最好向已包含值quantity * cart_price # name it row_total
然后你可以像这样轻松地总结新专栏:
ModelName.sum(:row_total)
答案 2 :(得分:0)
你似乎试图将各个元素相乘,红宝石不喜欢它们,因为它们本身就是数组。 正如djaszczurowski建议的那样,我建议在乘以元素后对数组进行求和。
根据他的回答,我建议用以下内容替换注入,因为(至少在我看来)它更能描述你想用代码做什么(
)@subtotal = @cart_content.sum { |count, price| count * price }