Создание ресурса Rails и конфликт пользовательских маршрутов - PullRequest
1 голос
/ 19 февраля 2012

Я новичок в рельсах, и мне было интересно, как я могу сделать эту работу.Я хочу, чтобы URL выглядел следующим образом:

http://localhost:3000/businesses/coldfire-gundam

по этому маршруту:

match "/businesses/:permalink", :to => "businesses#show", :as => :business_permalink

однако, когда я размещаю этот маршрут до этого:

resources :businesses

любойвызов / business / 1 (1 как param [: id]) больше не работает, очевидно, потому что он пойман объявлением постоянной ссылки

как я могу заставить его работать тогда?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2012

Вам нужен способ различать /businesses/:id и /businesses/:permalink.:id всегда должен быть числовым (если, конечно, вы не используете MongoDB), поэтому, если вы можете заставить :permalink всегда содержать что-то не числовое, тогда простой :constraints должен сделать трюк:

match '/businesses/:permalink', :to => 'businesses#show`, :constraints => { :permalink => /.*\D/ }, :as => :business_permalink

/.*\D/ заставляет маршрут совпадать, только если :permalink содержит хотя бы один нечисловой символ.Вам нужен .*, потому что регулярные выражения маршрута неявно привязаны в начале.

Если вы используете MongoDB, тогда ваш :id, вероятно, будет шестнадцатеричным BSON ID, поэтому вы захотите использовать /.*\H/ в качестве ограничения, и вы захотите каким-то образом убедиться, что ваш :permalink всегда содержит хотя бы один не шестнадцатеричный символ.

Как только все будет готово, вы можете поставить match "/businesses/:permalink" перед вашим resources :businesses в routes.rb и все должно работать нормально.Маршруты проверяются в том же порядке, в котором они отображаются в routes.rb, поэтому вы хотите, чтобы ваш match предшествовал вашему resources.

.
1 голос
/ 19 февраля 2012

Я бы предложил использовать гем friendly_id для создания постоянных маршрутов.Это позволит обработать большую часть «магии» для вас с легкостью повторного использования.

Ресурсы для драгоценного камня и Railscast: https://github.com/norman/friendly_id http://railscasts.com/episodes/314-pretty-urls-with-friendlyid

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