TypeError:没有将Array隐式转换为Integer Rails 4.2

时间:2015-11-19 05:34:49

标签: ruby-on-rails ruby-on-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)>]

3 个答案:

答案 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 }