1

我有一个路由,它被限制为仅在存在子域时运行,它看起来像这样:

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

谁能建议为什么这可能不起作用?

4

1 回答 1

1

听起来您的root :to => "pages#index"路线优先,并且match ''...路线被忽略了。我会尝试两条root路线并将您的:constraintlambda 设置在第一条路线上:

# 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

于 2013-07-30T17:16:45.767 回答