【问题标题】:Rails 2 Namespace and Shallow Routes IssueRails 2 命名空间和浅层路由问题
【发布时间】:2011-03-09 23:12:49
【问题描述】:

我已经编写了特定 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 添加到每个嵌套路由,但它什么也没做?

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 1970-01-01
        • 2012-01-25
        • 2017-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多