2012-02-10 9 views
2

Rails 3.2アプリケーションには、muscle_group属性とgrade_level属性を持つExerciseモデルがあります。 bundle exec rake routesを実行すると、ルートが実際に存在しないことを確認しRails 3ルートを動的セグメントで使用する方法

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

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

データベース演習が含まれている私は、設定/ routes.rbをでそれのためのダイナミックセグメントで次のルートを定義しました

  • 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

Iを用いたルート宣言はほとんど機能的でした。なんらかの理由で、ハイフンを使用し、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

+0

私はそれをこのようにしようとしています、 to_paramをオーバーライドして '' {{muscle_group}/grade - #{grade_level} /#{id} ''を返します。しかし、この場合、 'config/routes.rb'には何が入りますか? – evanrmurphy

関連する問題