Rails 3 ограничения маршрутизации, похоже, не соответствуют корпорации.
-
26-10-2019 - |
Вопрос
Я использую Rails 3.0.5, и я настраиваю маршрут, используя ограничение Regex. Раньше он работал на Rails 2.3.5, но он не работает в Rails 3. Маршрут выглядит так:
get '/:version_id' => 'pastes#show', :constraints => { :version_id => /[\d\w]{40}/ }
Это вообще не работает. Однако следующая работа:
get '/:version_id' => 'pastes#show', :constraints => { :version_id => /.{40}/ }
get '/:version_id' => 'pastes#show', :constraints => { :version_id => /\w{40}/ }
get '/:version_id' => 'pastes#show'
Есть ли что -то не так с тем, как Rails обрабатывает [] соответствие? Или я что -то делаю не так?
version_id обычно выглядит примерно так:
816616001d7ce848944a9e0d71a5a22d3b546943
Решение
У меня нет решения относительно того, почему одно может не работать над другим.
Однако, согласно книге Pickaxe, \w
на самом деле суперсет \d
.
\w [A-Za-z0-9\_] ASCII word character
\d [0-9] ASCII decimal digit character
Следовательно, [\d\w]{40}
ничем не отличается от \w{40}
, что работает для вас.
Не связан с StackOverflow