开发者

Rails 2 Namespace and Shallow Routes Issue

开发者 https://www.devze.com 2023-01-05 00:41 出处:网络
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.

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/p开发者_JAVA百科ages/: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?


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"}


There is no way to get around this. Turns out that all versions of Rails will break down the URL and its resource names to their lowest points when they're set to shallow. The only solution to this is to set all of your resource routes manually without using map.resources.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号