命名空间或范围内的根目录不适用于 rails 5.0.0-beta1

Root inside namespace or scope not working with rails 5.0.0-beta1

以下应按照 http://edgeguides.rubyonrails.org/routing.html#using-root

工作

routes.rb

Rails.application.routes.draw do
  scope module: 'admin'  do
    constraints subdomain: 'admin' do
      root to: 'tenants#index'
      resources :tenants
    end
  end
  root to: 'users#index'
  resources :users
end

不幸的是,最先列出的根最终接管了。如所列,admin.xyz.com 将解雇租户#index。如果到 'users#index' 的外部根在源顺序中首先移动,那么它将成为所有包括 admin.xyz.com.

的根路径

我是否正确阅读了指南?我是,这可能是 rails 5.0.0-beta1.

中的错误

我认为问题在于您必须在您使用的一个或另一个上放置一个 :as => something_not_root 以便同时使用两者。我参考了此 SO post 以获取该信息

所以试试这个

Rails.application.routes.draw do
  scope module: 'admin'  do
    constraints subdomain: 'admin' do
      root to: 'tenants#index', as: tenants_root
      resources :tenants
    end
  end
  root to: 'users#index'
  resources :users
end

然后调用它

tenants_root_path

如果你试图在命名空间内创建根路径(在标题中提到但在问题中没有真正描述),你可以这样做:

namespace(:plan) do
  root controller: :plan, action: :index, as: :root
end

这将创建一个 plan_root_path 辅助方法。起初我发现这有点令人困惑,因为我不明白我对命名空间的使用会导致 rails 自动在路径前加上命名空间,所以我尝试了这样的代码:

root controller: :plan, action: :index, as: :plan_root

这导致创建了一个 plan_plan_root_path 辅助方法,这不是您想要的。

我将这个答案添加到这个问题中,因为这个问题在搜索 "rails 5 namespace root path" 时作为最高响应出现,但名称空间问题没有解决。