Rails:对相同控制器名称的子域约束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails:对相同控制器名称的子域约束相关的知识,希望对你有一定的参考价值。
如果约束是子域,那么在不同的命名空间中具有类似命名的控制器的正确方法是什么?
resources :documents
root to: 'documents#index'
constraints subdomain: 'test' do
scope module: 'test' do
resources :documents
root to: 'documents#index' # this should hit the controller inside a module subfolder
end
end
那不应该将http://localhost:3000/documents
引向DocumentsController
和http://test.localhost:3000/documents
到Test::DocumentsController
吗?我错过了什么?目前后者只是前往前者。两个控制器都存在于正确的位置,即DocumentsController
位于/controllers
,命名空间位于/controllers/test
?
命名空间它也将它返回到错误的控制器:
constraints subdomain: 'test' do
namespace :test, path: nil do
scope module: 'test' do
resources :documents
root to: 'documents#index'
end
end
end
答案
Rails路由按照指定的顺序进行匹配,因此如果
resources :photos
上方有get 'photos/poll'
,则资源行的show action路由将在get行之前匹配。要解决此问题,请将获取行移到资源行上方,以便首先匹配。
所以,我相信你的例子,你应该将约束路线移到非约束路线之上,这样他们就有机会先匹配,然后如果你不是,那么你将“回退”到非约束文件资源在子域名上。
constraints subdomain: 'test' do
scope module: 'test' do
resources :documents
root to: 'documents#index' # this should hit the controller inside a module subfolder
end
end
resources :documents
root to: 'documents#index'
应该这样做。
编辑
那是问题的一半,另一半是this。它需要config.action_dispatch.tld_length = 0
配置中的development.rb
线。
以上是关于Rails:对相同控制器名称的子域约束的主要内容,如果未能解决你的问题,请参考以下文章