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

时间:2010-06-30 05:21:57

标签: ruby-on-rails ruby routing namespaces routes

我已经编写了特定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添加到每个嵌套路由但它没有做任何事情?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我不确定你没有使用/ 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"}

答案 1 :(得分:0)

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