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

at.*_*at. 8 routes ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4

我动态创建表单的URL username.users.example.com:

bob.users.example.com
tim.users.example.com
scott.users.example.com
Run Code Online (Sandbox Code Playgroud)

所有*.users.example.com请求都应该转到特定的控制器/操作.我该如何指定routes.rb

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

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

match '', to: 'my_controller#show', constraints: {subdomain: /.+\.users/}
Run Code Online (Sandbox Code Playgroud)

问题是它只匹配根URL.我需要这个以匹配每个可能的URL与*.users子域.显然我会把它放在我的routes.rb文件的顶部.但是,我如何指定一个包罗万象的路线?简单'*'吗?还是'/*'

Ami*_*ait 8

我想,你只需要做以下事情:

创建一个类Subdomainlib:

  class Subdomain  
    def self.matches?(request)  
      request.subdomain.present? && request.host.include?('.users')
    end  
  end
Run Code Online (Sandbox Code Playgroud)

在你的routes:

constraints Subdomain do
  match '', to: 'my_controller#show'
end
Run Code Online (Sandbox Code Playgroud)