Rails Routing Conditional с несколькими вариантами значений - PullRequest
1 голос
/ 03 августа 2010

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

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 в качестве значения для субдомена.Тем не менее, это не решает мои потребности.Мне нужно иметь возможность принимать значения '' (none), 'www' и 'www2', поэтому я попробовал что-то в пределах:

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

Это похоже на то, как вы его настроитев ActiveRecord, но, похоже, это не то же самое для маршрутов.

Кто-нибудь теперь знает, что я могу указать три значения, которые не являются последовательными?

1 Ответ

2 голосов
/ 03 августа 2010

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

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

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

:subdomain => /www\d*/

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...