3
class CartItemsController < ApplicationController
    before_filter :initialize_cart, :check_not_signedin
    def create
        product = Product.find(params[:product_id])
        kart = initialize_cart
        qty = CartItem.select(:quantity).where(:cart_id => kart.id, :product_id => product.id)


        if qty == 0
            @item = CartItem.new(:cart_id => kart.id, :product_id => product.id, :quantity => qty+1)
            if @item.save
                flash[:success] = "Product added"
                redirect_to category_products_path
            end
       else
            if CartItem.where("cart_id = ? AND product_id = ?", kart.id, product.id).first.update_column(:quantity, qty+1)
                flash[:success] = "Product updated"
                redirect_to category_products_path  

           end

       end
end

当我尝试运行它时,我收到以下错误“无法将 FixNum 转换为数组”app/controllers/cart_items_controller.rb:17:in `create'

请帮忙!

4

2 回答 2

3

以下行应返回ActiveRecord::Relationinto qty

qty = CartItem.select(:quantity).where(:cart_id => kart.id, :product_id => product.id)

您应该qty.count改用:qty.count == 0

此外,您不能像这样添加ActiveRecord::Relation一个1qty+1. 它会给你你的错误信息。

我不确定您要做什么,但我建议您使用debuggergem 来帮助您解决问题。按照此处的指南进行设置,设置非常简单:http: //guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debugger-gem

然后,放入debugger您的代码:

    product = Product.find(params[:product_id])
    kart = initialize_cart
    qty = CartItem.select(:quantity).where(:cart_id => kart.id, :product_id => product.id)
    debugger # <---- here

    if qty == 0
        @item = CartItem.new(:cart_id => kart.id, :product_id => product.id, :quantity => qty+1)
        if @item.save

然后,您可以在调试器断点处停止时了解更多信息,您可以执行以下操作:

qty.class
qty.count
# etc

此外,您可以运行rails console测试。

于 2013-08-12T06:43:56.623 回答
1

我猜下面一行返回一个数组:

CartItem.select(:quantity).where(:cart_id => kart.id, :product_id => product.id)

如果是这种情况,那么您不能简单地在这一行添加 +1:

if CartItem.where("cart_id = ? AND product_id = ?", kart.id, product.id).first.update_column(:quantity, qty+1)

如果不是这种情况,您能否指出错误消息中指出的哪一行是第 17 行。

于 2013-08-12T06:26:28.713 回答