2011-09-15 100 views
3

我试图指定路由(具体地说,root路由),取决于当前的子域。如果子域为subdomain,我想路由到controller#action1;到controller#action2如果子域存在但是不是subdomainwww;如果子域是www或者没有给出,则返回controller#action3多个子域的路由

我试过如下:

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 

浏览到subdomain.myapp.comother.myapp.com预期都工作(去action1action2,分别)。然而,当我尝试myapp.comwww.myapp.com,我得到:

Routing Error 
No route matches [GET] "/" 

当我运行rake routes,我看到

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

,所以我猜(猜测),因为有两条路为/,唐” t指定一个子域名,我的回退路由尝试匹配第二个,但是不符合约束条件并失败?我能做些什么才能正常工作?

回答

1

这似乎是路由过滤器gem中的一个错误,并且似乎在更新版本的gem和Rails 3.2中的路由更改方面得到修复。