Как использовать Rails 3 Routes с динамическими сегментами - PullRequest
2 голосов
/ 10 февраля 2012

В моем приложении на Rails 3.2 есть модель Exercise с атрибутами muscle_group и grade_level. Я определил следующий маршрут с динамическими сегментами для него в config / rout.rb:

# config/routes.rb
match "/:muscle_group/grade-:grade_level/:id" => "exercises#show"

Запуск bundle exec rake routes подтверждает, что маршрут действительно существует:

/:muscle_group/grade-:grade_level/:id(.:format) exercises#show

База данных содержит запись упражнения с:

  • id = 5
  • muscle_group = "брюшная полость"
  • grade_level = 1

И все же, когда я указываю своему браузеру http://localhost:3000/abdominal/grade-1/5,, я получаю:

Routing Error
No route matches [GET] "/abdominal/grade-1/5"
Try running rake routes for more information on available routes.

Как мне заставить этот маршрут работать с динамическими сегментами?

Ответы [ 2 ]

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

Объявление маршрута, которое я использовал, было почти функциональным.По какой-то причине существует проблема с использованием дефиса и отсутствием grade_level в качестве собственной / -разделенной подстроки.Когда я переключился на использование объявления маршрута:

match "/:muscle_group/grade/:grade_level/:id" => "exercises#show"

Вместо оригинала:

match "/:muscle_group/grade-:grade_level/:id" => "exercises#show"

http://localhost:3000/abdominal/grade/1/5 - это действительный маршрут.

Я бы предпочел иметь этот маршрут с дефисом и хотел бы знать, как заставить это работать, но это не главный приоритет.Если кто-нибудь знает, как заставить его работать с дефисом, пожалуйста, дайте мне знать.

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

Пакет действий в Rails использует to_param для переопределения того, как URL генерируются помощниками URL. Посмотрите на эту статью, в которой это объясняется.

http://www.seoonrails.com/to_param-for-better-looking-urls.html

...