# Can a route require POST or GET? / REST problem with routing

**URL:** <https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470>\
**Category:** Rails\
**Created:** [July 7, 2006, 9:52am UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470 "2006-07-07T09:52:11Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 9:52am UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/1 "2006-07-07T09:52:11Z")

</div>

Hi,

A store front a customer wants to GET /product/5/show. But for the  
application this is really GET /cart\_item/new/5 or even better  
/cart\_item/new?cart\_item[product\_id]=5

When the customer clicks add\_to\_cart they POST /product/5/show so that  
the url doesn’t confuse the user when any validation errors occur. But  
for the applicaiton this should be POST  
/cart\_item/create?cart\_item[quantity]=23

Can I use routing to check the request method something like the  
following?

map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
:action=\>‘new’, :id=\>/\d+/, :method=\>‘get’  
map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
:action=\>‘create’, :id=\>/\d+/, :method=\>‘post’

Thanks,  
Peter

---

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 1:55pm UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/2 "2006-07-07T13:55:40Z")

</div>

You can verify post for certain methods in your controller by adding:

class YourController \< ApplicationController

verify :method =\> :post, :only =\> %w( action1 action2 etc… )

…

Regards,  
Ian

---

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 4:49pm UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/3 "2006-07-07T16:49:16Z")

</div>

On 7/7/06, Peter M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Can I use routing to check the request method something like the following?
> 
> map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
> :action=\>‘new’, :id=\>/\d+/, :method=\>‘get’  
> map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
> :action=\>‘create’, :id=\>/\d+/, :method=\>‘post’

Try :conditions =\> { :method =\> ‘post’ } at the end of your route

Tom

---

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 5:07pm UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/4 "2006-07-07T17:07:33Z")

</div>

On 7/7/06, Tom W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> On 7/7/06, Peter M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > Can I use routing to check the request method something like the following?
> > 
> > map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
> > :action=\>‘new’, :id=\>/\d+/, :method=\>‘get’  
> > map.connect ‘product/:id/show’, :controller=\>‘cart\_item’,  
> > :action=\>‘create’, :id=\>/\d+/, :method=\>‘post’
> 
> Try :conditions =\> { :method =\> ‘post’ } at the end of your route

Tom,

Thanks for the reply. This doesn’t seem to work. I am using Rails  
1.1.4. Do I need a plugin for this to work? I see the error at the  
bottom of this email.

Look at the poor routing docs

[http://api.rubyonrails.com/files/vendor/rails/actionpack/lib/action\_controller/routing\_rb.html](http://api.rubyonrails.com/files/vendor/rails/actionpack/lib/action_controller/routing_rb.html)

Nothing:S

Peter

=\> Booting WEBrick…  
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action\_controller/routing.rb:49:in  
`test_condition': Valid criteria are strings, regular expressions, true, or nil (ArgumentError) from /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/code_generation.rb:228:in `check\_conditions’  
from  
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action\_controller/code\_generation.rb:226:in  
`check_conditions' from /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/routing.rb:362:in `write\_generation’  
from  
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action\_controller/routing.rb:557:in  
`generation_code_for' from /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/code_generation.rb:19:in `indent’  
from  
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action\_controller/routing.rb:553:in  
`generation_code_for' from /usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action_controller/routing.rb:492:in `each\_with\_index’  
from  
/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.12.3/lib/action\_controller/routing.rb:550:in  
`generation_code_for' ... 19 levels... from /usr/local/lib/ruby/gems/1.8/gems/rails-1.1.4/lib/commands/server.rb:30 from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require’  
from  
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active\_support/dependencies.rb:147:in  
`require’  
from script/server:3

---

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 5:28pm UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/5 "2006-07-07T17:28:35Z")

</div>

On 7/7/06, Peter M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Try :conditions =\> { :method =\> ‘post’ } at the end of your route
> 
> Tom,
> 
> Thanks for the reply. This doesn’t seem to work. I am using Rails  
> 1.1.4. Do I need a plugin for this to work? I see the error at the  
> bottom of this email.

I’m using edge rails and defining my routes using the simply\_restful  
plugin. It’s possible the http method conditions are only part of the  
latest routing code. I’m afraid I’m not sure.

Tom

---

<div class="post-metadata">

**Author:** ![dracos](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ea666f/32.png) [@dracos](https://www.ruby-forum.com/u/dracos)\
**Post date:** [July 7, 2006, 5:41pm UTC](https://www.ruby-forum.com/t/can-a-route-require-post-or-get-rest-problem-with-routing/97470/6 "2006-07-07T17:41:40Z")

</div>

Hello Peter,

2006/7/7, Peter M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Tom,
> 
> Thanks for the reply. This doesn’t seem to work. I am using Rails  
> 1.1.4. Do I need a plugin for this to work? I see the error at the  
> bottom of this email.

you can write :require =\> { :method =\> :post } in your route, but  
this feature is only available in Edge, if I’m not wrong.

– Jean-FranÃ§ois.
