Question on routes and default routes

Say I have a destroy action configured as the following

map.foo '/foos/:id', :controller => 'foos', :action => 'show',
:conditions => { :method => :get }
map.foo '/foos/:id', :controller => 'foos', :action => 'destroy',
:conditions => { :method => :delete }

Get on foos/:id goes to show and delete on foos/:id goes to destroy.
Nice and restful so all good so far.

But now say if i have the following default route in my routes.rb

map.connect ':controller/:action/:id'

Now someone can explicitly type in the url http://…/foos/destroy/123
and it will go to my destroy action in controller foos although this
action should only be accessed by a POST/DELETE not a GET.

Is there anyway to prevent a get on that action other than checking
within the controller itself?

def destroy
  return home_url unless method.delete?
  ...
end

Thanks!

Hi,

I'm kind of new to rails, but I'm pretty sure it is suggested that you remove those defaults, and only create routes explicitly.

Thanks,
Brandon

If you are going to go with a Restful design, why not just you
map.resources?

It is NOT suggested that the defaults be removed like Brandond says.

It IS suggested that you use map.resources :foos. Which will give you
what you want.

if you, however, want to check explicitely for the method of and
action you can do things like:

def some_action
    render(:text => "you shouldnt be trying this") and return unless
reques.post?
    ....
    ....
end