Ruby on rails Ruby on Rails将通配符子域路由到控制器/操作

Ruby on rails Ruby on Rails将通配符子域路由到控制器/操作,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,routes,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,Routes,Ruby On Rails 4,我以username.users.example.com的形式动态创建URL: bob.users.example.com tim.users.example.com scott.users.example.com 所有*.users.example.com请求都应转到特定的控制器/操作。如何在routes.rb中指定此选项 对www.example.com的所有其他请求转到我的routes.rb文件中的常规路由列表 更新:我观看了,它显示了以下代码位,这似乎正是我所需要的(更改了控制器和子域

我以
username.users.example.com
的形式动态创建URL:

bob.users.example.com
tim.users.example.com
scott.users.example.com
所有
*.users.example.com
请求都应转到特定的控制器/操作。如何在
routes.rb中指定此选项

www.example.com
的所有其他请求转到我的
routes.rb
文件中的常规路由列表

更新:我观看了,它显示了以下代码位,这似乎正是我所需要的(更改了控制器和子域):


问题是它只匹配根URL。我需要将每个可能的URL与
*.users
子域匹配。显然,我会把它放在我的
routes.rb
文件的顶部。但是我如何指定一个“全包”路由呢?它仅仅是
“*”
?或者
“/*”

我认为,您只需要执行以下操作:

lib
中创建一个类
子域

  class Subdomain  
    def self.matches?(request)  
      request.subdomain.present? && request.host.include?('.users')
    end  
  end
在您的
路线中

constraints Subdomain do
  match '', to: 'my_controller#show'
end

通过创建
匹配?
方法,可以基于某些特定条件动态约束路由

假设我们必须过滤URL的子域

constraints Subdomain do
  get '*path', to: 'users#show'
end

class Subdomain
  def self.matches?(request)
    (request.subdomain.present? && request.subdomain.start_with?('.users')
  end
end
我们在这里做的是检查URL,如果它以子域
users
开头,那么只点击
users#show
操作。您的类必须具有
mathes?
方法类方法或实例方法。如果你想让它成为一个实例方法,那么

constraints Subdomain.new do
  get '*path', to: 'proxy#index'
end
您可以使用
lambda
以及如下所示实现相同的功能

我们也可以使用
lambdas

get '*path', to: 'users#show', constraints: lambda{|request|request.env['SERVER_NAME'].match('.users')}

这个railscast可能会帮助您:rails 3 rails 3.2 rails 4 hmhmmmm。。。到底是哪一个?顺便说一句,如果您打算使用大量javascript,那么请记住跨子域的ajax是一个难题。@phoet-我应该更清楚地了解Rails版本。我使用的是3.2,但如果这意味着这个解决方案会更简单,我会升级到4.0。我的建议是:不要这样做。但@AmitThawait为您指出的铁路乘客就是一个完美的例子。您还可以在这里查看一个多功能示例:@phoet-什么意思是不做它?不创建我想要的应用程序?还有别的解决办法吗?
get '*path', to: 'users#show', constraints: lambda{|request|request.env['SERVER_NAME'].match('.users')}