Rails路由条件有多个值选项

时间:2010-08-03 17:29:24

标签: ruby-on-rails routing routes

我有一个基于两个条件的rails路由,即domain和subdomain是一个特定的值。问题是子域有多个可能的值可以工作,但我似乎无法将它们作为数组或散列传递。

map.with_options(:conditions => {:domain => AppConfig['base_domain'], :subdomain => 'www'..'www3'}) do |signup|
    signup.plans '/signup', :controller => 'accounts', :action => 'plans'
    ...[truncated]...
end

以上示例的工作原理是接受www,www1,www2& www3作为子域的值。但是,这并没有真正解决我的需求。我需要能够接受''(没有),'www'和'www2'的值,所以我尝试了一些东西:

map.with_options(:conditions => {:domain => AppConfig['base_domain'], :subdomain => ['','www','www2']}) do |signup|

这与您在ActiveRecord中设置它的方式类似,但对于路线来说似乎并不相同。

现在有人知道我可以指定三个不连续的值吗?

1 个答案:

答案 0 :(得分:2)

如果可以将其渲染为正则表达式,则可以将其用作条件。将数组转换为正则表达式非常简单:

:subdomain => Regexp.new(%w[ www www3 ].collect { |p| Regexp.escape(p) }.join('|'))

既然你只是处理一个简单的模式,为什么不把它表达为这个呢?

:subdomain => /www\d*/

重要的是要注意路由使用的正则表达式不应该像通常那样使用^$来锚定。它们必须完全匹配才有效,部分匹配将被忽略。