2012-02-10 39 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