Вопрос

Я прочитал документы 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, если это не так хорошо подходит.

Другие советы

Вы смотрели на Рельсы руководство по прокладке маршрута?В нем содержится много информации, которая поможет вам разобраться в работе маршрутизатора, и включает раздел о вложенные ресурсы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top