我正在尝试指定路由(具体来说,root
路由),具体取决于当前的子域。如果子域名为controller#action1
,我想要转到subdomain
;如果子域名存在但{em>不 controller#action2
或subdomain
,则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.com
和other.myapp.com
都按预期工作(分别转到action1
和action2
)。但是,当我尝试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"}
所以我猜(推测)因为/
有两条路由没有指定子域,我的回退路由尝试匹配第二条但后来不符合约束而失败了吗?我该怎么做才能让它正常工作?
答案 0 :(得分:1)
这似乎是路由过滤器gem中的一个错误,并且似乎在更新版本的gem和Rails 3.2中的路由更改时得到修复。