URLルーティング

URLルーティングとは、リクエストされた URL に対して呼び出すアクションを決定する仕組みのことです。ブラウザからリクエストを受け取ると、このルーティングルールに該当するURLかどうかチェックされ、該当すれば定義したアクションが呼び出されます。該当しなければ、デフォルトのルールによるアクションが呼び出されます。

繰り返しになりますが、デフォルトのルールは次のとおりでした。

 /コントローラ名/アクション名/引数1/引数2/...

では、ルーティングルールをカスタマイズしてみましょう。
ルーティングの定義は config/routes.cfg に記述します。1つのエントリは、1行でディレクティブ、パス、アクションを並べて書きます。 ディレクティブは match, get, post の中から1つ選択 します。
なお、# ではじまる行はコメント行と見なされます。

例えば、次のように書きます。

 match  "/index"  "Merge#index"

この場合には、ブラウザから /index とリクエストされたら、POSTメソッドかGETメソッドか関係なしにMerge コントローラの index アクションに受け渡します。

次に、get ディレクティブを定義した場合です。

 get  "/index"  "Merge#index"

この場合では、GET メソッドで /index がリクエストされた時だけ、ルーティングを実施します。 POST メソッドでリクエストされた場合は拒否されます(アクションに受け渡しません)。

同様に、post ディレクティブを指定した場合は、POST メソッドのリクエストのみ有効です。GETメソッドのリクエストは拒否されます。

 post  "/index"  "Merge#index"

次は、アクションに引数を渡す方法についてです。ルーティングルールとして次のエントリを定義したとします。”:params”というキーワードがポイントです。

 get  "/search/:params"  "Searcher#search"

この場合には、GETメソッドで /search/foo がリクエストされたら、Searcher コントローラの引数を1つ持つ search アクションが呼び出されます。その引数には “foo” が渡されます。
同様に、/search/foo/bar がリクエストされたら、引数を2つ持つ search アクションが呼び出されます。第1引数、第2引数にはそれぞれ “foo”、”bar” が渡されます。

 /search/foo     ->  SearcherController の search("foo");
 /search/foo/bar ->  SearcherController の search("foo", "bar");