在我的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
数据库包含一个练习记录:
然而,当我将浏览器指向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.
如何通过动态细分来实现此路线?
答案 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