获取错误“无法将FixNum转换为数组”

时间:2013-08-12 06:20:34

标签: ruby-on-rails-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:在'create'

请帮忙!

2 个答案:

答案 0 :(得分:3)

以下行应将ActiveRecord::Relation返回qty

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

您应该使用qty.count代替qty.count == 0

此外,您无法像ActiveRecord::Relation这样添加1qty+1。它会给你错误信息。

我不确定您要做什么,但我建议您使用debugger gem来帮助您解决问题。按照此处的指南进行设置,设置非常简单: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进行测试。

答案 1 :(得分: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行是哪一行。