Gets errors before submitting form


When I click on "Proceed to Checkout", instead of showing a clean
form, it seems as if the form has already been submitted empty and the
new page comes up with all the errors -- which I don't think many
customers would appreciate.
I am not sure where in the code is the problem.

My order.rb class is:

I fixed my state field by using:
<%= state_select(object, method) %>

But I'm still having troubl with my checkout code. Also If I try and
submit the order, nothing happens and I'm back at the same form,
showing errors that no information was entered.

Would anyone have any ideas what is the problem with my code?


I tried to separate my displaying the checkout form and placing the
order by spliting the method into:

def checkout
    @page_title = "Checkout"
    @order =[:order])
    @order.customer_ip = request.remote_ip
    @order.customer_id = =

  def place_order
      if @order.process
        flash[:notice] = 'Your order has been submitted, and will be
processed immediately.'
        session[:order_id] =
        # Empty the cart
        redirect_to :action => 'thank_you'
        flash[:notice] = "Error while placing order.
        render :action => 'view_cart'
      render :action => 'checkout'

So, now I don't get any error messages when I click on "Proceed to
checkout" but, when I click on "Place Order" I get error messages:

NoMethodError in CartController#place_order

You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating

app/controllers/cart_controller.rb:99:in `place_order'

Why is that? don't I have an order object?


You don't. Nothing in place_order creates @order


You don't. Nothing in place_order creates @order

I thought of that just after I posted this. So I added @order =, which gave me new errors.
So then I thought of something else and it works.

So, all the code that was in checkout went into
def place_order
  # original code

def checkout
# only shows the checkout form

So, all is good.