2009-09-14 80 views
0

我創建的軌道一個簡單的購物車,當我將產品添加到購物車我得到這個錯誤: 你有一個零對象時,你沒想到吧!獲得零對象在購物車

的添加到購物車方法是:

def add_to_cart 
    begin 
     product = Product.find(params[:id]) 
    rescue ActiveRecord::RecordNotFound 
     logger.error("Attemp to access invalid product #{params[:id]}") 
     flash[:notice] = "Invalid Product !" 
     redirect_to :action => :index 
    else 
     @cart = find_cart  
     @cart.add_product(product) 
    end 
    end 

和add_product在車:

def add_product(product) 
    current_item = @items.find {|item| item.product == product} 
    if current_item 
     current_item.increment_quantity 
    else 
     @items << CartItem.new(product) 
    end  
    end 

車工作正常,當我添加了救援方法,以add_to_cart這事...

回答

0

也許開始啓動一個新的適用範圍,使產品的變種是本地的。 然後,當您在救援塊中添加產品時,它是一個新的本地Nil。

爲了驗證這一理論只是整個前添加product = nil開始,代碼救援塊

+0

不是這樣,或者@cart是零,因爲find_cart方法找不到零。在這兩個建議之間,你應該能夠弄明白。 Ruby調試器可能有所幫助:http://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-ruby-debug – hgmnz 2009-09-14 11:43:16

0

我要去猜測,這是不是一個範圍的問題,如下面的IRB測試表明:

irb(main):001:0> begin 
irb(main):002:1* product = 'abc' 
irb(main):003:1> rescue Exception => ex 
irb(main):004:1> nil 
irb(main):005:1> else 
irb(main):006:1* puts product.inspect 
irb(main):007:1> end 

找出這個問題的最好方法就是查找使用LOGGER.debug "product now contains #{product.inspect}"後發現產品中有什麼。

你的回溯也是信息性的。在這一點上,很難說出口譯員在抱怨什麼。這可能是該產品爲零,但同樣容易,它可能是@cart或您的視圖中引用的東西。

0

如何定義add_product方法中的@items?我無法在任何地方看到它,是嗎?