如果约束是子域,在不同命名空间中具有类似命名控制器的正确方法是什么?
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
答案 0 :(得分:1)
Rails路由按照指定的顺序进行匹配,因此如果
resources :photos
高于get 'photos/poll'
,则资源行的show action路线将在获取行之前匹配。要解决此问题,请将获取行移到资源行上方,以便首先匹配。
所以,我相信你的例子,你应该将约束路线移到非约束路线之上,这样他们就有机会先匹配,然后你就会倒退"如果您不在子域中,则访问非约束文档资源。
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
行。