Rails настраиваемый маршрут с ограничениями - символы привязки регулярных выражений не допускаются в требованиях маршрутизации

У меня есть следующий маршрут:

  get 'users/:user_id/:name', to: 'profiles#show',
    :constraints => { :name => /[a-zA-Z0-9_]+$/ }, as: 'user_profile'

Что вызывает ошибку:

Regexp anchor characters are not allowed in routing requirements: /[a-zA-Z0-9_]+$/

Итак, я понимаю, что символ ^ не разрешен, но не уверен, какой символ производит эту конкретную ошибку маршрутизации.

Ответ 1

В регулярном выражении мы имеем два якоря:

  • Начало строки/строки ^
  • Конец строки/строки $

Попробуйте удалить $ из шаблона, и вам должно быть хорошо идти...

Ответ 2

Якорями регулярных выражений являются ^ и $, но они ничего не достигают. "(Y) не нужно использовать привязки, потому что все маршруты привязаны к началу." .

Итак, ограничение:

:constraints => { :name => /[a-zA-Z0-9_]+/ }

сделает то, что вы хотите - убедитесь, что имя состоит из 1 или более из этих символов, и ничего больше. BTW вы можете упростить регулярное выражение:

:constraints => { :name => /\w+/ }