views:

116

answers:

1

Hello.

I've written the admin area of a particular rails app and now I'm ready to set it as own section within the website.

Therefore, it will be /admin

However, I didn't want to have it as /admin within the route itself I wanted to have something less common, so I added a couple of hyphens before and after it.

So the route is /-admin-/ and the namespace is Admin.

After setting this up using :path_prefix => "/-admin-", I have the following code block:

map.namespace "/-admin-/", :name_prefix => "", :path_prefix => "/-admin-" do |admin|

This works for all but shallow routes, instead, in the rake routes output the output is:

new_page GET    /-admin-/areas/:area_id/pages/new(.:format)                         {:action=>"new", :controller=>"admin/pages"}
edit_admin_page GET    /admin/pages/:id/edit(.:format)                                     {:action=>"edit", :controller=>"admin/pages"}
admin_page GET    /admin/pages/:id(.:format)                                          {:action=>"show", :controller=>"admin/pages"}
PUT    /admin/pages/:id(.:format)                                          {:action=>"update", :controller=>"admin/pages"}
DELETE /admin/pages/:id(.:format)                                          {:action=>"destroy", :controller=>"admin/pages"}
areas GET    /-admin-/areas(.:format)                                            {:action=>"index", :controller=>"admin/areas"}
POST   /-admin-/areas(.:format)                                            {:action=>"create", :controller=>"admin/areas"}
new_area GET    /-admin-/areas/new(.:format)                                        {:action=>"new", :controller=>"admin/areas"}

Notice how the shallow-routed routes are prefixed as /admin/ and not as /-admin-/ (as are their parent routes).

Any ideas on how to get around this? Is this a bug in rails or do I need to work around it? I tried adding the :path_prefix to each nested route but it doesn't do anything?

Any ideas?

A: 

I'm not sure about your rationale on not using /admin - security through obscurity isn't really security - you should be using something like authlogic to keep out unauthorised users.

Try the following to namespace your admin controllers:

map.namespace :admin, :path_prefix => "-admin-" do |admin|
    admin.resources :users
    admin.resources :pages
end

A sample generated route:

admin_users GET /-admin-/users(.:format) {:controller=>"admin/users", :action=>"index"}
Mr. Matt