Как настроить маршруты RESTful в Rails (основы)
-
21-09-2019 - |
Вопрос
Я прочитал документы Rails для Маршрутизация, Ресурсы для отдыха, и в UrlHelper - помощник по URL, и до сих пор не понимаю рекомендаций по созданию сложных / вложенных маршрутов.Пример, над которым я сейчас работаю, относится к событиям, в которых есть множество ответов.Итак, пользователь просматривает список событий, нажимает кнопку зарегистрироваться, проходит процесс регистрации и т.д.Я хочу, чтобы URL-адреса выглядели следующим образом:
/events
/events/123 # possible without title, like SO
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
/events/123/my-event-title/registration/new
... and all the restful nested resouces.
Вопрос в том, как мне выполнить это с минимальным объемом кода?
Вот что у меня сейчас есть:
map.resources :events do |event|
event.resources :rsvps, :as => "registration"
end
Это дает мне вот что:
/events/123/registration
Каков наилучший способ выполнить остальные 2 маршрута?
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
Где my-category
это просто массив из 10 возможных типов, которыми может быть событие.
Я изменил Event#to_param
чтобы вернуться "#{self.id.to_s}-#{self.title.parameterize}"
, но я бы предпочел иметь /id/title
со всей каноничностью
Решение
Поскольку описанные вами SEO-дружественные URL-адреса не соответствуют способу, которым Rails генерирует маршруты RESTful, вам нужно будет использовать обычные маршруты для их настройки.Например:
map.show_event 'events/:id/:event_title', :controller => 'events', :action => 'show'
Не думайте, что вам нужно использовать автоматически сгенерированные маршруты RESTful абсолютно для всего в вашем приложении.Это не всегда хорошо подходит для того, что вы пытаетесь сделать.Даже в руководстве по прокладке рельсов так сказано:
Хотя маршрутизация RESTful стала стандартом Rails, все еще существует множество мест, где более простая обычная маршрутизация работает нормально.Вы даже можете смешивать два стиля в одном приложение.В общем, вам следует по возможности отдавать предпочтение маршрутизации RESTful, потому что это облегчит написание отдельных частей вашего приложения.Но нет необходимости пытаться включить рожок каждую последнюю часть вашего приложения в RESTful framework, если это не так хорошо подходит.
Другие советы
Вы смотрели на Рельсы руководство по прокладке маршрута?В нем содержится много информации, которая поможет вам разобраться в работе маршрутизатора, и включает раздел о вложенные ресурсы.