2012-02-18 4 views
1

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

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

используя этот маршрут:

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

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

resources :businesses 

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

как я могу это сделать работать тогда?

ответ

2

Вам нужен способ, чтобы дифференцировать /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 всегда содержит по крайней мере один не -hex-символ.

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

1

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

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

Смежные вопросы