我有一条路由被限制为仅在子域存在时运行,如下所示:
# Set the default root for when a subdomain is used.
match '', to: 'public::pages#show', constraints: lambda { |r| r.subdomain.present? && r.subdomain != 'app' }
# Set the default application route.
root :to => "pages#index"
我正在寻找一些路由规范,以测试这个路由是否正确(手动测试应用程序显示该路由确实工作正常)但是我遇到了一些问题。
我目前针对路由测试的镜头只是提供整个域,子域作为get()调用的一部分:
it "routes to public page on subdomain" do
get('http://somesubdomain.example.com/').should route_to("public::pages#show")
end
然而,这个规范失败了,路由器已经定向到根事件而不是预期的事件。
<{"controller"=>"public::pages", "action"=>"show"}> expected but was
<{"controller"=>"pages", "action"=>"index"}>.
有谁能说明为什么这可能不起作用?
答案 0 :(得分:1)
听起来您的root :to => "pages#index"
路线优先,match ''...
路线被忽略。我会尝试两条root
路线并在第一条路线上设置:constraint
lambda:
# Set the default root for when a subdomain is used.
root to: 'public::pages#show',
constraints: lambda { |r| r.subdomain.present? && r.subdomain != 'app' }
# Set the default application route.
root :to => "pages#index"
有关在root
路线上使用约束的详情,请参阅this blog post。