Подтвердить что ты не робот

Почему маршруты с точкой в ​​параметре не совпадают?

У меня есть маршрут для моих пользователей вроде /iGEL/contributions, который отлично работает. Но теперь пользователь зарегистрирован с именем типа "A.and.B.", и теперь маршрут не соответствует, поскольку имя содержит точки.

Мой маршрут:

get "/:user/contributions" => 'users#contributions'

Любые идеи?

4b9b3361

Ответ 1

Смотрите синий информационный блок здесь:

По умолчанию динамические сегменты не принимать точки - это потому, что точка используется как разделитель для форматирования маршруты. Если вам нужно использовать точку в динамическом сегменте добавьте ограничение, которое отменяет это - для пример :id => /[^\/]+/ позволяет ничего, кроме косой черты.

Это будет, например, следующее:

get "/:user/contributions" => 'users#contributions', :constraints => { :user => /[^\/]+/ }

Ответ 2

Если ваш переменный сегмент является последним, тогда использование регулярного выражения [^\/] также будет использовать формат. В таком случае скорее используйте:

/([^\/]+?)(?=\.json|\.html|$|\/)/