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"}
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.
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.
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.
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.