多个子域的路由

时间:2011-09-15 15:35:33

标签: ruby-on-rails ruby-on-rails-3 routing subdomain

我正在尝试指定路由(具体来说,root路由),具体取决于当前的子域。如果子域名为controller#action1,我想要转到subdomain;如果子域名存在但{em>不 controller#action2subdomain,则www;如果子域名为controller#action3,则为www

我尝试了以下内容:

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

所以我猜(推测)因为/有两条路由没有指定子域,我的回退路由尝试匹配第二条但后来不符合约束而失败了吗?我该怎么做才能让它正常工作?

1 个答案:

答案 0 :(得分:1)

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