Trying to understand something about instance variables.

My question is based on the following code from the agile book:

File: depot_f/app/controllers/store_controller.rb

private def find_cart session[:cart] ||= Cart.new

File: depot_f/app/models/cart.rb

class Cart

֒attr_reader :items def initialize @items = end

def add_product(product) @items << product end

File: depot_f/app/controllers/store_controller.rb

def add_to_cart @cart = find_cart product = Product.find(params[:id]) @cart.add_product(product) end

Ok, so correct me if Im wrong, but dont instance variables only last till the end of the method?

So how is it possible to keep appending items to the instance array named @items?

Sorry for the newbie question, but I need to get this cleared up so I can move on.

You're right about instance variables.. but way up at the top is the line:

   session[:cart] ||= Cart.new

This line checks to see if sesion[:cart] exists and if it doesn't, it sets it to a new Cart. Then it returns that cart object (either a new one or from the session). This happens a bit farthe down in the line:

   @cart = find_cart

At which point you have a valid @cart which has as instance variables @items as they were saved in the session from the last request.

-philip