Rails 3 ограничения маршрутизации, похоже, не соответствуют корпорации.

StackOverflow https://stackoverflow.com/questions/5330076

  •  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}, что работает для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top