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.