2013-05-26 27 views
0

我有一個錯誤,但我不能確定來源:(它工作正常,我第一次使用add_to_cart行動,但第二次,我有這個錯誤提高Ruby on Rails 3:會話問題:釋放內容

Started GET "/home/add_to_cart?id=5&money=USD" for 10.0.1.3 at 2013-05-26 17:22:42 +0200 
Processing by HomeController#add_to_cart as HTML 
Parameters: {"id"=>"5", "money"=>"USD"} 
Completed 500 Internal Server Error in 2ms 

NoMethodError (undefined method `+' for nil:NilClass): 
    app/models/cart.rb:14:in `add_artwork' 
    app/controllers/home_controller.rb:39:in `add_to_cart' 

似乎對象@cart丟失或東西....或對象「藝術品」丟失......我不知道......

控制器

def add_to_cart 
    artwork = Artwork.find(params[:id]) 
    @cart = find_or_create_cart 
    @cart.add_artwork(artwork) #--- line 39 
    redirect_to(:action => 'show_cart') 
end 

def show_cart 
    @cart = find_or_create_cart 
end 

private 

def find_or_create_cart 
    session[:cart] ||= Cart.new 
end 

cart.rb

class Cart 

    attr_reader :items 
    attr_reader :total_price 

    def initialize 
    @items = [] 
    @total_price = 0.0 
    end 

    def add_artwork(artwork) 
    @items << LineItem.new_based_on(artwork) 
    @total_price += artwork.price #---- line 14 
    end 
end 

line_item.rb

class LineItem < ActiveRecord::Base 

    belongs_to :artwork 
    belongs_to :order 

    def self.new_based_on (artwork ) 
    line_item = self.new 
    line_item.artwork = artwork 
    line_item.price = artwork.price 
    return line_item 
    end 
end 

session_store.rb

Larrabyblaine::Application.config.session_store :active_record_store 

回答

0

看來它是對象的藝術品至極太大而造成的錯誤之前,只需添加一條線。

如果我更換

line_item.artwork = artwork 

由(數據庫中的對應至極修改)

line_item.title = artwork.title 

它完美。如果任何人有關於如何通過會話管理大對象的想法,我都聽到了。

1

不能使用在@total_price+=沒有啓動的值。

線14

@total_price ||= 0 
@total_price += artwork.price #---- line 14 
+0

抱歉,但沒了。 @total_price在「初始化」操作中啓動。 – Lefty

+0

我試圖評論第14行看看會發生什麼,我得到一個符號(0x7b)的轉儲格式錯誤,導致應用程序崩潰。我必須從數據庫中刪除相應的會話才能返工。 – Lefty

0

試試這個,

@total_price = if @total_price 
@total_price += artwork.price 
else 
artwork.price 
end