Routing question

Hello. I'm adding an admin section to my site and have configured routing along the following lines:

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

The above works fine. However, if I have controller 'A', it is still accessible from http://mysite.com/A due to the default :controller/:action/:id route. I'd rather not have two URIs mapped to the same page and am wondering if there is a way to exclude a controller from a route or to alter the path to http://mysite.com/admin/A when a user visits http://mysite.com/A. As of now, my only solution is to remove the :controller/:action/:id route, but this means I would have to map routes for every controller I want accessible at my webroot which is kind of a pain and doesn't seem very rails like.

Thanks.

I don't know the solution to what you are asking about excluding controllers.

I think the namespacing of controllers has been discussed before and some people like it some people don't.

Name your admin controllers Admin::AdminTestController and place them in admin/admin_test_controller.rb

script/generate controller Admin::AdminTestController

This can then be accessed with admin/admin_test without modifying the stock routes.

That should solve your problem if I read your post correctly.

I'm assuming you have some sort of authentication too, that could be used to restrict access to the controllers except for admin users.

Fredrik

thelorax wrote:

The above works fine. However, if I have controller 'A', it is still accessible from http://mysite.com/A due to the default :controller/:action/:id route. I'd rather not have two URIs mapped to the same page and am wondering if there is a way to exclude a controller from a route or to alter the path to http://mysite.com/admin/A when a user visits http://mysite.com/A.

you can use the :requirements param of the route, so you can match :controller against a regexp. If the pattern is not matched, then the route will not be recognized for that request

regards,

javier ramirez

Thanks. Both the Admin::Controller and the :requirements option look like they might work for me.