2012-02-10 68 views
2

在我的Rails 3.2应用程序中,有一个属性为muscle_group和grade_level的练习模型。我定义了与动态段以下的路径,它在配置/ routes.rb中:如何在动态段中使用Rails 3路由

# 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 =“abdomin:与记录人”
  • 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

我使用这条路线的声明几乎是功能性的。出于某种原因,使用连字符时出现问题,而不是将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

Rails中的操作包使用to_param来覆盖URL助手生成的URL的方式。看看这篇文章,它解释了它。

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

+0

此外,它似乎像这个其他职位是关于一个非常类似的事情.http://stackoverflow.com/questions/5326483/rails-3-resource-routing-without-an-id – jake 2012-02-10 05:15:36

+0

我想这样,覆盖to_param返回'“#{muscle_group}/grade - #{grade_level} /#{id}”'。但是在这种情况下'config/routes.rb'中会发生什么? – evanrmurphy 2012-02-10 17:02:39