Я успешно использовал следующий маршрут в своем приложении Rails 2.x:
map.user ':id', :controller => 'users', :action => 'show'
Это, как мой самый низкий маршрут, правильно ловит такие вещи, как /tsmango
и отображает Users#show
.
Я сейчас пытаюсь добавить второй, похожий маршрут:
map.post '~:id', :controller => 'posts', :action => 'show'
Поскольку ни моим пользователям, ни моим сообщениям не разрешено содержать ~ и поскольку этот маршрут будет отображаться над моим маршрутом map.user , я предположил, что это правильно перехватит любой вызов, начинающийся с /~
, и отобразит мой Posts#show
действие. К сожалению, у меня проблемы с тем, чтобы заставить это работать.
Что интересно, этот подобный маршрут работает отлично:
map.post ':id~', :controller => 'posts', :action => 'show'
Хотя я, безусловно, готов пойти на ':id~'
, так как он дает тот же результат, на данный момент я действительно просто разочарован и заинтересован в том, как бы вы построили маршрут, который соответствует '~:id'
.
Стоит отметить, что я не хочу изменять мой метод to_param или моего реального пользователя и публиковать слагы, чтобы включить в него префикс ~. Я просто хочу, чтобы в маршруте указывалось, какое действие должно с этим справиться. Если я не ошибаюсь, это исключает использование чего-то вроде:
:requirements => {:id => /\~[a-zA-Z0-9]/}
Заранее спасибо за любую помощь, которую вы можете оказать!
Обновление: Мне известно о приоритете маршрута, и выше было указано, что я размещаю маршрут '~:id'
выше маршрута ':id'
. Я получаю следующую ошибку при попытке создать URL-адрес, например post_path(@post)
:
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym