2010-03-18 13 views
2

Я прочитал документы Rails для Routing, Restful Resources и UrlHelper и до сих пор не понимает лучших практик создания сложных/вложенных маршрутов. Пример, над которым я сейчас работаю, - это события, которые имеют has_many rsvps. Таким образом, пользователь смотрит через список событий, и щелчки регистр, и проходит через процесс регистрации, и т.д. Я хочу URLs выглядеть следующим образом:Как настроить RESTful Routes in Rails (основы)

/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 со всей канонической Несс

ответ

1

Поскольку SEO-дружественные URL-адреса, которые вы описываете, не соответствуют способу, которым Rails генерирует маршруты RESTful, вам нужно будет использовать обычные маршруты для их настройки. Например:

map.show_event 'events/:id/:event_title', :controller => 'events', :action => 'show' 

Не думайте, что вы должны использовать автоматически сгенерированные RESTful маршрутов для абсолютно все, что в вашем приложении. Это не всегда хорошо подходит для того, что вы пытаетесь сделать. Даже Rails маршрутизация руководства говорит так:

Хотя RESTful маршрутизация стала стандартом Rails, есть еще много места, где проще регулярная маршрутизации работает отлично. Вы можете даже смешать два стиля в одном приложении . В общем, вы должны предпочитаете RESTful маршрутизацию, когда это возможно, , потому что это сделает части вашего приложения проще для записи. Но нет необходимости пробовать shoehorn каждый последний фрагмент вашего приложения в RESTful framework, если это не хорошо подходит.

+0

ОК, круто, это в основном все, что мне было интересно: «это нормально, если не использовать map.resources?». Спасибо, что подтвердили это. Я сделаю то, что вы описали :). –

-1

Вы смотрели на Rails routing guide? У этого есть много информации, чтобы понять вас маршрутизатором и включает раздел на nested resources.