II-15-6. Webアプリケーション開発のカスタマイズ

ルーティングやページ遷移、表示部分のカスタマイズ、リダイレクト処理など、RoRによるWebアプリケーションをカスタマイズする典型的な手法を紹介する。

【学習の要点】

* アプリケーションのルーティング(URLのマッピング)の動作は、config/routes.rbファイルを修正することで変更できる。

* ページの表示内容は、該当するテンプレートファイルを修正することで変更できる。

* リダイレクト処理は、該当するControllerのアクションメソッド中でredirect_toメソッドを呼び出すことで実現できる。

図II-15-6. RoRのルーティング

【解説】

1) RoRにおけるルーティングの変更

RoRの、URLとメソッドのマッピングの仕組みは、config/routes.rbファイルを修正することで変更できる。config/routes.rbファイル内には、ActionController::Routing::Routes.drawメソッドの呼び出しが記述される。drawメソッドの引数として渡すブロックの中で、mapオブジェクトのメソッドを呼び出すことで、ルーティングを変更することが可能である。railsコマンドでプロジェクトを作成した場合、config/routes.rbファイルには次の記述がある。

map.connect ‘:controller/:action/:id’

* connectメソッドへの引数は、パターンと追加パラメータに分けられる。上記の例では、パターンのみが渡されている。

* パターンはスラッシュ、またはピリオドでコンポーネントにわけられる。

* 「:[パラメータ名]」の形式のコンポーネントは、リクエストされたURLパスの該当部分の値を[パラメータ名]に対応する値として設定する。

* 上記の例のパターンに対し、「/admin/show /1」というURLパスが与えられた場合、

- controller => ‘admin’

- action => ‘show’

- id => ‘1’

という設定が行われる。

* controllerパラメータはControllerオブジェクトの決定に、actionパラメータは、アクションメソッドの決定に利用される。その他のパラメータはアクションメソッド内で利用することができる。

* controllerパラメータ、およびactionパラメータは、必ずしもパターン内で指定する必要はなく、追加パラメータとして指定することも可能である。以下の例の場合「foo/bar/baz」というパスに対し、AdminControllerオブジェクトのshowメソッドが呼び出される。

map.connect ‘foo/bar/baz’, :controller => ‘admin’, :action => ‘show’

* connectメソッドの呼び出しはブロック内に複数記述することが可能であり、呼び出された順にパターンに対するマッチングが行われる。マッチした時点で、パターンに対応するアクションが実行される。

2) RoRアプリケーションの表示内容の変更

RoRアプリケーションの表示は、テンプレートによって行われる。例として、「ruby script/generate scaffold」スクリプトで生成されるテンプレートの一部を以下にあげる。これらを修正することで、生成したアプリケーションの修正を行うことができる。

* app/views/[コントローラ名]/index.html.erb – 一覧画面のテンプレート

* app/views/[コントローラ名]/edit.html.erb – 編集画面のテンプレート

* app/views/[コントローラ名]/show.html.erb – 詳細画面のテンプレート

3) RoRアプリケーションにおけるリダイレクト

リダイレクト処理は、該当するControllerのアクションメソッド中でredirect_toメソッド呼び出すことにより実現できる。リダイレクト先は引数として指定し、controller、actionをパラメータとして指定することができる。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。