2011-09-15 2 views
3

J'essaie de spécifier des routes (en particulier, la route root), en fonction de ce que le sous-domaine actuel. Je veux router vers controller#action1 si le sous-domaine est subdomain; à controller#action2 si le sous-domaine est présent mais passubdomain ou www; et controller#action3 si le sous-domaine est www ou non.Routage pour plusieurs sous-domaines

J'ai essayé les éléments suivants:

MyApp::Application.routes.draw do 
    scope :constraints => { :subdomain => "subdomain" } do 
    match "/" => "controller#action1" 
    end 

    scope :constraints => lambda {|req| req.subdomain.present? && !%w(subdomain www).include?(req.subdomain) } do 
    match "/" => "controller#action2" 
    end 

    root :to => "controller#action3" 
end 

Parcourir à subdomain.myapp.com et other.myapp.com travaillent tous les deux comme prévu (aller action1 et action2, respectivement). Cependant, lorsque je tente myapp.com ou www.myapp.com, je reçois:

Routing Error 
No route matches [GET] "/" 

Quand je lance rake routes, je vois

/{:subdomain=>"subdomain", :controller=>"controller", :action=>"action1"} 
    /{:controller=>"controller", :action=>"action2"} 
root/{:controller=>"controller", :action=>"action3"} 

donc je suppose que (spéculant) que parce qu'il ya deux voies pour / qui n » t spécifier un sous-domaine, ma route de secours essaie de correspondre à la seconde, mais ne répond pas aux contraintes et échoue? Que puis-je faire pour que cela fonctionne correctement?

Répondre

1

Cela semble avoir été un bug dans la gemme de filtre de routage, et semble être corrigé à partir de versions plus récentes de la gemme et les changements de routage dans Rails 3.2.

Questions connexes