Rails3になってルーティングの書き方がずいぶん変ったので使い方をメモ。
基本
Rails3 でのアプリケーション作り始めにて、
1
|
|
などと打つと、色々なファイルが生成され、その中にはroutes.rbも含まれている。routes.rbの覗いてみると、
1
|
|
という記載がある。 これはリソースCRUD操作を行うためのURLとアクションを自動で設定してくれる。 RailsでCRUDを行うために用意されている7つのアクション(index, new, create, show, edit, update, destroy)とURLとの紐付けをresourcesを使うことによって一度にすることができる。 なお、routes.rbにresources, resourceなどと書いていくわけだが、ルーティングの優先順位は上から順となっている。
現在設定されているルーティングを確認するには、rake routesコマンド用いる。
1 2 3 4 5 6 7 8 |
|
id不要の場合
基本で記載したresourcesを用いた場合は、
1
|
|
のように、URLにidが付加されている。 しかし、ユーザのプロフィール設定画面などidが不要な場合もあるので、そのような場合はresourcesではなく、resourceを用いる。
1
|
|
7つのCRUDアクションの内、indexは生成されなくなる。
1 2 3 4 5 6 7 |
|
ルーティングの制限
デフォルトのアクション7つのうち、不要なURLを生成したくない場合、:only 又は :except オプションを使用する。
:onlyオプションを用いると、指定したアクションのみ生成される。
1
|
|
:exceptオプションを用いると、指定したアクションは生成されない。
1
|
|
ルーティングの追加
ルーティングの追加方法はリソースのidがURLに付くかどうかで、2つの方法がある。リソースidが付く方(/articles/1/preview みたいなの)をメンバールーティング、付かない方(/articles/preview みたいなの)をコレクションルーティングと呼ぶ。
メンバールーティングの追加
1 2 3 4 5 6 7 8 9 |
|
コレクションルーティングの追加
1 2 3 4 5 6 7 8 9 |
|
URLをピンポイントで指定
ログアウトのリンクなど、どのユーザでも変らないURLをピンポイントで指定するには次のようにmatchを用いる。
1
|
|
メソッドの指定
1 2 3 |
|
Named helperの設定
Named helperとはprofile_pathなどと書いているもののこと。 これを設定するには、:as オプションを使って、ルーティングのための名前を指定する。
1
|
|
これでlogout_pathやlogout_urlが使えるようになる。
ネストしたURL
リソースが1対他の関係にある場合、URLをネストさせることができる。 例えば、1つの記事(article)にいくつかのコメント(comment)がある場合には次のように書くことができる。
1 2 3 |
|
便利だが、ネストしすぎると混乱を招きそうなので、1回くらいにしておくとよい。 2回、3回とネストしなければならない場合、設計を見直す機会かもしれない。
1 2 3 |
|
トップページ(root)
デフォルトで用意されているpublic/index.htmlを消去してから、次のように記載する。
1
|
|
Non-Resourceful Routes
Non-Resourceful Routesとは、任意のURLをアクションにルーティングするためのサポート。
1
|
|
というように書く。これで、GET articles/edit/1 すると、パラメータは次のようになる。
1
|
|
URLに特定の文字列を含む場合は、
1
|
|
として、GET /articles/show/1/with_user/2すると
1
|
|
となる。
参考サイト:ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Rails Routing from the Outside In - 株式会社ウサギィwiki