多个子域名的路由设置

4
我想指定路线(特别是根路线),具体取决于当前子域。如果子域是subdomain,则我想要路由到controller#action1;如果子域存在但不是subdomainwww,则我想要路由到controller#action2;如果子域是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.com 或者 www.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个回答

1

这似乎是路由过滤器宝石中的一个错误,随着宝石的更新和Rails 3.2中的路由更改,问题似乎已经得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接