Whats the difference? Function order.

I have been baffled by this for a while?
I have been going through some tutorials and got stuck on this.
The following gives me an error in the view "You have a nil object
when you didn't expect it" for "display_cart". It's saying the
variable "@items" is nil in the view.
But if i reorder the functions and put "display_cart" before
"find_cart", it works.
Does the order of the functions matter?

class StoreController < ApplicationController

  def index
    @products = Product.salable_items
  end

  def add_to_cart
    product = Product.find(params[:id])
    @cart = find_cart
    @cart.add_product(product)
    redirect_to(:action => 'display_cart')
  end

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

  def display_cart
    @cart = find_cart
    @items = @cart.items
  end

end

Hi --

I have been baffled by this for a while?
I have been going through some tutorials and got stuck on this.
The following gives me an error in the view "You have a nil object
when you didn't expect it" for "display_cart". It's saying the
variable "@items" is nil in the view.
But if i reorder the functions and put "display_cart" before
"find_cart", it works.
Does the order of the functions matter?

No, but their relation to the "private" directive does. If
display_cart is private, then the action won't be executed; instead,
the template will be rendered directly, and since the action was
skipped, @items won't be set.

So you'll need to move display_cart above "private", or declare it
public. (I'd move it; it gets messy if you start declaring access for
methods individually.)

David