【问题标题】:Rails 3 Routing - How to use scope to create admin prefixRails 3 路由 - 如何使用范围创建管理员前缀
【发布时间】:2011-06-02 16:27:12
【问题描述】:

我正在使用this Rails Guide 创建一个范围,以便为某些控制器创建一个“/admin”前缀。

所以我有一个名为 Pages 的控制器,我想通过“/admin/pages”访问它。

scope "/admin" do
    resources :pages
end

效果很好,但仍然可以通过“/pages”访问...我该如何防止这种情况发生? (我正在使用 Rails 3)

这是我的路线文件:

devise_for :users

scope "/admin" do

    resources :pages

    resources :contents

end

root :to => "index#index"   

match ':controller(/:action(/:id(.:format)))'

【问题讨论】:

    标签: ruby-on-rails routing scope routes


    【解决方案1】:

    您的命名空间语法是正确的,但您需要从最后一行删除全部匹配,因为根据默认的 routes.rb 文件,

    # This is a legacy wild controller route that's not recommended for RESTful applications.
    # Note: This route will make all actions in every controller accessible via GET requests.
    

    如果请求的 URL 与你声明的命名空间不匹配,它仍然会匹配最后的 catch-all 路由。

    【讨论】:

    • 感谢您的快速回答。是的,我确实做到了。我是 Rails 新手,所以我可能遗漏了一些简单的东西。路线有效,但旧路线仍然有效,这是我不想要的。
    • 嗯...我刚刚尝试过,所以它应该可以正常工作。您是否重新启动了 Web 服务器?在开发模式下,您不必重新启动,但值得一试。你能发布你的 routes.rb 文件吗?
    • 用路由文件更新帖子。谢谢你的手! (另外,我已经清理了路由并重新启动了服务器)
    • 我更新了答案以考虑您的 routes.rb 文件。
    【解决方案2】:

    试试这个应该可以的

    namespace :admin do 
    
      resources :pages 
    
    end
    

    http://edgeguides.rubyonrails.org/routing.html

    【讨论】:

    • 这也行。但是,命名空间不同于作用域。 admin 命名空间中的助手名称将以 admin_ 为前缀。
    【解决方案3】:

    试试这个:

    scope "/admin", as: :admin do
      resources :pages
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2011-07-19
      • 2015-12-24
      相关资源
      最近更新 更多