Направляющие, Направляющие Условное выражение с несколькими опциями значения

У меня есть маршрут направляющих, который основан на двух условиях, что домен и субдомен являются определенным значением. Проблема состоит в том, что существует несколько возможных значений для субдомена для работы, но я, может казаться, не могу передать их как массив или хеш.

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
задан James Pierce 3 August 2010 в 17:29
поделиться

1 ответ

Если вы можете отобразить его как регулярное выражение, вы можете использовать его как условие. Преобразовать массив в регулярное выражение довольно просто:

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

Поскольку вы все равно имеете дело с простым шаблоном, почему бы не выразить его так?

:subdomain => /www\d*/

Важно отметить, что регулярные выражения, используемые маршрутами, не являются должен быть привязан с помощью ^ или $ , как обычно. Чтобы они были действительными, они должны совпадать полностью, а частичные совпадения игнорируются.

2
ответ дан 2 September 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: