2013-07-30 2 views
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" 

나는 그것을 테스트하기 위해 함께 일부 라우팅 사양을 넣어 찾고 있어요를 이 경로는 제대로 (경로를 실제로 잘 작동하는지 응용 프로그램을 수동으로 테스트) 그러나 난 몇 가지 문제에 대해 다가오고 있어요.

it "routes to public page on subdomain" do 
    get('http://somesubdomain.example.com/').should route_to("public::pages#show") 
end 

그러나이 사양에 실패, 라우터가로 이동했습니다

이것에 대한 라우팅 테스트에서 나의 현재의 슛은 GET() 호출의 일부로서 하위 도메인으로, 전체 도메인을 제공하는 것입니다 의도 한 이벤트가 아닌 루트 이벤트.

<{"controller"=>"public::pages", "action"=>"show"}> expected but was 
    <{"controller"=>"pages", "action"=>"index"}>. 

아무도 왜 작동하지 않을지 제안 할 수 있습니까?

답변

1

root :to => "pages#index" 경로와 같은 소리가 우선 적용되며 match ''... 경로가 무시됩니다. 나는 두 root 경로를 시도하고 처음에 :constraint 람다를 설정합니다 :

# 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를 참조하십시오.

+0

최고급 스튜어트 -이 기능은 훌륭합니다. 덕분에. – SirRawlins

+0

레일 메모가 여러 루트 객체를 지원하지 않아서 응용 프로그램을 Rails4로 업그레이드했을 때이 솔루션이 고장났습니다. 예외가 발생합니다. 아직 Rails4에서 적절한 해결책을 찾고 있습니다. – SirRawlins

관련 문제