如何将子域重定向到Rails 4上的多个控制器?

时间:2013-07-16 13:23:05

标签: ruby-on-rails ruby-on-rails-3 routes subdomain ruby-on-rails-4

我的Rails 4应用程序中有代理和品牌(代理有很多:品牌),每个都有:子域名字段。

所以我希望:

- agentsubdomain.domain.com (should redirect to 'agents#show')
- brandsubdomain.domain.com (should redirect to 'agents/brands#show')

我正在尝试在routes.rb中执行此操作:

resources :agents do
    resources :brands, module: 'agents'
end

get '/', to: 'agents/brands#show', 
    constraints: lambda { |r| r.subdomain.present? && r.subdomain != 'www' }
get '/', to: 'agents#show', 
    constraints: lambda { |r| r.subdomain.present? && r.subdomain != 'www' }

root 'home#index'

这显然不起作用,因为只有第一个'/'匹配,总是去品牌#show。

如何重定向到代理#show OR agents / brands #show,具体取决于哪一个?

谢谢!

1 个答案:

答案 0 :(得分:1)

创建routes_helper.rb模块。在其中创建两个名为“agents_brands_present?”的方法。还有一个叫做“agents_present?”然后让他们接收请求对象作为参数,并检查是否存在适当的子域。

require 'RoutesHelper'
get '/', to: 'agents/brands#show', 
    constraints: lambda { |r| r.subdomain.present? && RoutesHelper.agents_brand_present?(r) && r.subdomain != 'www' }
get '/', to: 'agents#show', 
    constraints: lambda { |r| r.subdomain.agents_present? && RoutesHelper.agents_present?(r) && r.subdomain != 'www' }