ルーティングの基礎
MVCのうちCのコントローラーの話をします。
<参考>
ルーターとコントローラーはAction Packコンポーネントのサブコンポーネントによって提供される機能。ルーターはActive Dispatch、コントローラーはAction Controllerというサブコンポーネントを使う。
ルーターの役割は、クライアントからの要求をアクションに割り付けること(ルーティング)であり、コントローラーはルーターにより割り付けられた要求の実行を制御する。一方、モデルはコントローラーの指示を受けてデータベースとのやりとりを行う。
ルーティングとは
クライアントのブラウザから発信されたURIによる要求(HTTPリクエスト)を、どのコントローラーのどのアクションに引き渡すかを判断し振り分けること。ルートを設定するにはconfigディレクトリの中のroutes.rbというファイルを使う。
ルーティング情報の見方は前にも書いた↓
リソースフルルート
モデルを介したリソースに対するデータの追加、既存データの更新、削除、一覧表示といったお決まりの作業をリソースフルルートと呼ぶ。
Railsではリソースフルルートをresourcesルートとして表現する。例えばUserモデルに対する標準のリソースフルルートを設定するには、routes.rbに
resources :users
と記述すれば、以下のような複数の個別ルートが実装される。
Prefix(接頭辞) | HTTPメソッド | URI | コントローラー#アクション |
---|---|---|---|
users | GET | /users(.:format) | users#index |
〃 | POST | /users(.:format) | users#create |
new_user | GET | /users/new(.:format) | users#new |
edit_user | GET | /users/:id/edit(.:format) | users#edit |
user | GET | /users/:id(.:format) | users#show |
〃 | PATCH/PUT | /users/:id(.:format) | users#update |
〃 | DELETE | /users/:id(.:format) | users#destroy |
この中で必要のないルートがあれば除外することもできるし、足りないルートは追加することもできるが、リソースフルルートを使用することでシンプルに表現できるため、できるだけこの方法を使ったほうが良い。また、これらの7つのアクションをすべて利用するorしないにかかわらず、リソースフルルートに従うようにしよう。
アプリケーションルートの設定
アプリケーションルートとは、トップページを表示するときに使用するルートのことで、http://localhost:3000のように、ドメイン名・ホスト名のみで指定されるルート(つまりトップページ)である。何も設定していないときはRails標準ページが呼び出される。
特定のページをルートに設定したいときはrootメソッドを使用する。
書式:root to: 'コントローラー名#アクション名'
root to: 'users#index'
redirectメソッドを使ってリダイレクトを指定することもできる。この場合、リダイレクトの宛先をhttp://ドメイン:ポート番号/users/indexというURIで指定している。
root to: redirect('users/index')
アプリケーションルートの表示ルール
優先度が高い順に、以下のように表示される。
- publicディレクトリにindex.htmlが存在する場合、public/index.htmlを表示する
- routes.rbにルート設定がされている場合、ルートに従って表示する
- ルート設定がされていない場合、Railsデフォルトページを表示する
非リソースフルルート
個別で設定するルートのことを非リソースフルルートを呼ぶ。非リソースフルルートの基本形式は次の通り。
書式:HTTPメソッド 'URIパターン', to: 'コントローラー#アクション'
例えばURIに「/login」を指定し、ログイン画面を表示するためのアクションがAuthenticationsコントローラーのnewアクションとすると、このアクションを呼び出す場合、
get '/login', to: 'authentications#new'
と記述する。
なお、例えば
get 'introduction/index', to: 'introduction#index'
のように、URIで指定されたパス名が、コントローラーとアクションに相当する場合、コントローラーとアクションの指定を省略し、以下のように記述できる。
get 'introduction/index'
ルーティングヘルパー
Railsのルートを設定すると、宛先URLを1語で表現するヘルパーが自動的に実装される。このURLを1語で表現するためのメソッドをルーティングヘルパーという。
ルーティング情報のPrefix欄で表示されている名前に「path」を付加することでPathヘルパーとして、「url」を付加することでURLヘルパーとして使用できる。
Prefixがnew_userのとき、ルーティングヘルパーは
- new_user_path → /users/new
- new_user_url → http://localhost:3000/users/new
となる。