Маршруты Rails 3: как избежать конфликта с действием show? - PullRequest
3 голосов
/ 13 февраля 2011

В настоящее время у меня установлены следующие маршруты для photos:

resources :photos
match 'photos/:user' => 'photos#user', :as => :user_photo
match 'photos/:user/:key' => 'photos#show', :as => :show_photo

Эти два match маршрута дают мне URL-адреса, такие как:

http://example.com/photos/joe_schmoe
http://example.com/photos/joe_schmoe/123xyz

... аналогичноспособ, которым Flickr форматирует свои URL.

Проблема, с которой я сталкиваюсь, заключается в том, что маршрут photos/:user либо интерпретируется как метод show, либо если я ставлю эти пользовательские маршруты перед resources тогда маршруты типа /new интерпретируются как метод user.

Как мне обойти это, не прибегая к куче пользовательских маршрутов?

Ответы [ 2 ]

8 голосов
/ 13 февраля 2011

Вы хотите поместить этот пользовательский маршрут выше на resources :users, чтобы он соответствовал первому в маршрутах.

match 'photos/:user' => 'photos#user', :as => :user_photo
resources :photos

Дополнительно вы можете полностью отключить действие show:

resources :photos, :except => :show
1 голос
/ 13 февраля 2011

Не рекомендуется смешивать маршруты отдыха с маршрутами пользовательских совпадений на одном и том же ресурсе. Как вы заметили, эти два маршрута будут перехватывать действия друг друга. Ваш лучший выбор - выбрать только одну систему маршрутизации для ресурса и придерживаться его. Если вам нужны маршруты в стиле flickr, вы должны удалить оставшийся маршрут и добавить другие необходимые маршруты для новых / create / etc, которые вам могут понадобиться. Если вы отчаянно хотите сохранить оба этих маршрута, вам нужно либо отключить шоу из маршрута отдыха, когда маршрут отдыха находится сверху, либо отключить новый из маршрута матча, пока матч находится сверху. Вы можете использовать regexp, чтобы отфильтровать некоторые запросы на совпадение, например:

match 'photos/:user' => 'photos#user', :as => :user_photo, :constraints => { :user => /.*[^n][^e][^w].*/ }

Это ужасно быстро, но я советую вообще не использовать маршрут отдыха.

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