如何使用带动态段的Rails 3路由

时间:2012-02-10 05:01:03

标签: ruby-on-rails ruby-on-rails-3 routing routes url-routing

在我的Rails 3.2应用程序中,有一个带有属性muscle_group和grade_level的Exercise模型。我在config / routes.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 =“abdominal”
  • 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 个答案:

答案 0 :(得分:2)

我使用的路线声明几乎是功能性的。出于某种原因,使用连字符并且没​​有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 :(得分:1)

Rails中的Action Pack使用to_param来覆盖URL帮助程序生成URL的方式。看一下这篇解释它的文章。

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