Rails 2命名空间和浅层路由问题

我已经编写了特定rails应用程序的管理区域,现在我已准备好将其设置为网站内的自己的部分。

因此,它将是/ admin

但是,我不想把它作为/ admin在路由本身中我想要一些不常见的东西,所以我在它之前和之后添加了几个连字符。

所以路由是/ -admin- /,命名空间是Admin。

使用:path_prefix =>“/ -admin-”进行设置后,我有以下代码块:

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

这适用于所有浅层路由,相反,在rake路由输出中输出为:

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

注意浅路由路由的前缀为/ admin /而不是/ -admin- /(与其父路由一样)。

关于如何解决这个问题的任何想法? 这是rails中的错误还是我需要解决它? 我尝试将:path_prefix添加到每个嵌套路由但它没有做任何事情?

有任何想法吗?

我不确定你没有使用/ admin的理由 – 通过默默无闻的安全性并不是真正的安全性 – 你应该使用像authlogic这样的东西来阻止未经授权的用户。

请尝试以下命名管理控制器:

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

生成的示例路线:

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

没有办法解决这个问题。 事实certificate,当所有版本的Rails设置为浅层时,它们会将URL及其资源名称分解为最低点。 解决此问题的唯一方法是手动设置所有资源路由,而不使用map.resources