Почему маршруты с точкой в ​​параметре не совпадают? - PullRequest
77 голосов
/ 20 марта 2011

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

Мой маршрут:

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

Есть идеи?

Ответы [ 3 ]

133 голосов
/ 20 марта 2011

См. Синее информационное окно здесь :

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

Это, например, будет:

get "/:user/contributions" => 'users#contributions', :constraints => { :user => /[^\/]+/ }
8 голосов
/ 21 сентября 2015

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

/([^\/]+?)(?=\.json|\.html|$|\/)/
7 голосов
/ 20 марта 2011

Похоже, что следующая ссылка отвечает на ваш вопрос.

http://avdi.org/devblog/2010/06/18/rails-3-resource-routes-with-dots-or-how-to-make-a-ruby-developer-go-a-little-bit-insane/

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