Rails 3 routing problem

Hi guys, I'm having this problem with a simple route. I have this on my routes.rb resources :items do   member do     post 'price'   end end

However, when I try to post to this route, I get this error:

Started POST "/items/28/price" for 127.0.0.1 at 2011-02-20 18:52:10 -0300

ActionController::RoutingError (No route matches "/items/28/price"):

Does anyone have any idea what am I doing wrong?

Thanks a lot in advance.

Phil

Hi guys,

I’m having this problem with a simple route. I have this on my routes.rb

resources :items do

member do

post 'price'

end

end

However, when I try to post to this route, I get this error:

Started POST “/items/28/price” for 127.0.0.1 at 2011-02-20 18:52:10 -0300

ActionController::RoutingError (No route matches “/items/28/price”):

Does anyone have any idea what am I doing wrong?

First check: is this route listed when you do rake routes | grep price ?

Phil

Hi guys, I'm having this problem with a simple route. I have this on my routes.rb resources :items do member do post 'price' end end

However, when I try to post to this route, I get this error:

Started POST "/items/28/price" for 127.0.0.1 at 2011-02-20 18:52:10 -0300

ActionController::RoutingError (No route matches "/items/28/price"):

Does anyone have any idea what am I doing wrong?

First check: is this route listed when you do `rake routes | grep price` ?

Yes, it is. This is the output [kandalf@bifur depot]$ rake routes | grep price        price_item POST /items/:id/price(.:format) {:action=>"price", :controller=>"items"}

Phil

Phil

Hi guys,

I’m having this problem with a simple route. I have this on my routes.rb

resources :items do

member do

post ‘price’

end

end

However, when I try to post to this route, I get this error:

Started POST “/items/28/price” for 127.0.0.1 at 2011-02-20 18:52:10 -0300

ActionController::RoutingError (No route matches “/items/28/price”):

Does anyone have any idea what am I doing wrong?

First check: is this route listed when you do rake routes | grep price ?

Yes, it is. This is the output

[kandalf@bifur depot]$ rake routes | grep price

   price_item POST   /items/:id/price(.:format)

{:action=>“price”, :controller=>“items”}

… that’s crazy, then. The route is there, looks to be configured just fine. No reason you should get a “no route matches” error, that I can see. In development mode you shouldn’t even need to restart the server, but you could always try that.

From what you’ve posted so far, I can’t see that you’re doing anything wrong. Not sure why it wouldn’t be working.

try calling it using:

curl /items/:id/price.html or price.json as needed.

format is needed when you call a route from outside without using named_path route.

hope this helps.

– Aldo

That didn't work either, but I think that's because curl is requesting a GET and the route is a POST. I don't know what's going on. Everything seems to be in the right place.

curl -X POST /items/:id/price.html or price.json

– Aldo

Excerpts from Phil Crissman's message of Sun Feb 20 15:14:45 -0800 2011:

> Started POST "/items/28/price" for 127.0.0.1 at 2011-02-20 18:52:10 -0300 > > ActionController::RoutingError (No route matches "/items/28/price"): First check: is this route listed when you do `rake routes | grep price` ?

Second check: Confirm that your form really does have method=POST.

Yes, it does. Anyway, I've just changed it to use the update action, it makes more sense anyway. However, I still don't understand why it is happening.

Excerpts from Leonardo Mateo's message of Tue Feb 22 17:12:06 -0800 2011:

> Excerpts from Phil Crissman's message of Sun Feb 20 15:14:45 -0800 2011: >> > Started POST "/items/28/price" for 127.0.0.1 at 2011-02-20 18:52:10 -0300 >> > >> > ActionController::RoutingError (No route matches "/items/28/price"): >> First check: is this route listed when you do `rake routes | grep price` ? > > Second check: Confirm that your form really does have method=POST. Yes, it does. Anyway, I've just changed it to use the update action, it makes more sense anyway. However, I still don't understand why it is happening.

Something I should have been more clear about: you want to make sure that your form element has its method attribute set to post, but you will also need to check that it does not have a hidden parameter generated by rails named _method with a value of, e.g. put.

Unfortunately when you make this mistake of specifying a post route in config/routes but accidentally submitting to a synthetic "put" (very easy to do if using +form_for+), the log will still read “Started POST” and you will be given no indication of the problem.

David J. Hamilton wrote in post #986294:

However, I still don't understand why it is happening.

Something I should have been more clear about: you want to make sure that your form element has its method attribute set to post, but you will also need to check that it does not have a hidden parameter generated by rails named _method with a value of, e.g. put.

Unfortunately when you make this mistake of specifying a post route in config/routes but accidentally submitting to a synthetic "put" (very easy to do if using +form_for+), the log will still read Started POST and you will be given no indication of the problem.

Wow - THANK YOU! I would have been scratching my head for hours on this one. Very non-obvious, and seemingly not well known.