【发布时间】:2013-10-04 00:50:01
【问题描述】:
我正在尝试根据子域让 Rails 转到不同的控制器#action,这就是我目前在 routes.rb 中所拥有的
Petworkslabs::Application.routes.draw do
get '/', to: 'custom#show', constraints: {subdomain: '/.+/'}, as: 'custom_root'
get '/', to: "welcome#home", as: 'default_root'
end
rake 显示我希望它采取的正确路线
rake routes
Prefix Verb URI Pattern Controller#Action
custom_root GET / custom#show {:subdomain=>"/.+/"}
default_root GET / welcome#home
但由于某种原因,我无法获得像 abc.localhost:3000 这样的请求来访问自定义控制器。它总是将它路由到welcome#home。有任何想法吗?我对 Rails 还很陌生,所以任何有关一般调试的提示也将不胜感激。
编辑:我使用调试器逐步完成了代码,这就是我发现的
(rdb:32) request.domain “abc.localhost” (rdb:32) request.subdomain “” (rdb:32) request.subdomain.present? 假的
看起来出于某种原因,rails 认为子域不存在,即使它存在。我想知道是不是因为我在做这个本地主机。
【问题讨论】:
-
为什么要加载一个主页,然后在控制器上进行重定向
-
@mZaragoza ,我不遵循您的建议。你能再解释一下吗?
-
我可以使用任何子域访问您的应用程序。应用程序控制器加载并从那里您可以确定我来自哪个子域,然后您可以将我重定向到正确的位置
-
@mZaragoza,是的,我可以这样做,但对我来说这就像一个黑客。如果 rails 有办法使用内置路由机制进行路由,我宁愿使用它。
-
我同意,但我不知道您是否可以在路线文件中做出决定
标签: ruby-on-rails ruby ruby-on-rails-4