路由规范和子域约束

时间:2013-07-30 17:07:22

标签: ruby-on-rails-3 rspec

我有一条路由被限制为仅在子域存在时运行,如下所示:

# 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"}>.

有谁能说明为什么这可能不起作用?

1 个答案:

答案 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