代码之家  ›  专栏  ›  技术社区  ›  matsko

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

  •  0
  • matsko  · 技术社区  · 14 年前

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

    但是,我不想在路由本身中使用/admin,我想使用一些不太常见的东西,所以在它前后添加了几个连字符。

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

    设置后使用:path\u prefix=>/-admin-“,我有以下代码块:

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

    这适用于除浅路由以外的所有路由,相反,在rake routes输出中,输出为:

    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中的一个bug还是我需要解决它?我尝试在每个嵌套路由中添加:path\u前缀,但没有任何作用?

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Codebeef    14 年前

    我不确定你不使用/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"}
    
        2
  •  0
  •   matsko    12 年前

    这是没办法逃避的。结果发现,所有版本的Rails都会将URL及其资源名分解到它们设置为shallow时的最低点。唯一的解决方案是手动设置所有资源路由,而不使用 map.resources .