首页 > 解决方案 > 如何避免 Rails 5 嵌套资源命名空间路由中的双下划线

问题描述

在升级到 Rails 5 之前,我们有一些嵌套的资源/命名空间路由,但现在使用 Rails 5,路由抱怨没有明确as:的路由来命名路由/路径助手。

这是我们的路由嵌套示例:

resources :categories, path: "schools", only: [:index, :show, :create] do
  namespace :categories, path: "", as: nil do
    resource :increment, only: [:new]
    namespace :admin, path: "admin" do
      resource :dashboard, only: [:show]
    end
  end
end

在 rails 5 升级之前,这将产生路线助手,如:

category_admin_dashboard_path GET /schools/:category_id/admin/dashboard(.:format) categories/admin/dashboards#show

在 Rails 5 升级之后,它现在正在生成路由助手,例如:

categories__category_admin_dashboard_path GET /schools/:category_id/admin/dashboard(.:format) categories/admin/dashboards#show

我们已经尝试取消嵌套路线,但没有运气......我确定我们做错了什么或非常规。

有人可以就如何纠正这种糟糕的 Rails 路线嵌套提供建议吗?

标签: ruby-on-railsruby-on-rails-4routingruby-on-rails-5

解决方案


替换namespace :categoriesscope module: :categories

resources :categories, path: "schools", only: [:index, :show, :create] do
  scope module: :categories do
    resource :increment, only: [:new]
    namespace :admin, path: "admin" do
      resource :dashboard, only: [:show]
    end
  end
end

推荐阅读