Member route error

I’m getting a RoutingError for a member route I can’t figure out. I’m
posting a simple form that has a submit button as a confirmation step.

Here’s the route:

routes.rb

resources :orders do
post ‘confirm’, :on => :member
end

  1. “rake routes” shows it’s there:

confirm_order POST /orders/:id/confirm(.:format)
{:action=>“confirm”, :controller=>“orders”}

  1. Controller Orders defines confirm
  2. HTML output shows the form is correctly set to post with action “/
    orders/3/confirm”
  3. Request header on the Routing Error page shows “POST /orders/3/
    confirm HTTP/1.1”
  4. My functional test passes: “post :confirm, :id =>
    @order.to_param, :order => @order.attributes
  5. All other routes in routes.rb are disabled except the above

Everything seems to be correct but it’s not working:

No route matches “/orders/3/confirm”

If I change the request method on the route to “get” and simply view
in the browser it works. Help? :slight_smile:

Okay, I see now. There’s a hidden input “_method” with value “put”
output automatically with my form. I needed to change my route to use
“put” instead of “post” to match what’s happening behind the scenes.

My functional test was working with post so I couldn’t see anything
wrong there, and it’s odd because checking everything at the endpoints
showed a failed post request and not a (silent) put request. I had
thought about using put and this is probably more technically correct
because I’m modifying an existing object.