1

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

所以我想拥有:

- 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'

这显然行不通,因为只有第一个'/'匹配,总是去brands#show。

我如何重定向到agents#show OR agent/brands#show,取决于哪一个存在?

谢谢!

4

1 回答 1

1

创建一个 routes_helper.rb 模块。在其中创建 2 种方法,一种称为“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' }
于 2013-07-17T06:23:25.143 回答