Hit the books!!

プログラミング学習記録

ルーティングの基礎

MVCのうちCのコントローラーの話をします。

<参考>

ルーターとコントローラーはAction Packコンポーネントのサブコンポーネントによって提供される機能。ルーターはActive Dispatch、コントローラーはAction Controllerというサブコンポーネントを使う。

ルーターの役割は、クライアントからの要求をアクションに割り付けること(ルーティング)であり、コントローラーはルーターにより割り付けられた要求の実行を制御する。一方、モデルはコントローラーの指示を受けてデータベースとのやりとりを行う。

ルーティングとは

クライアントのブラウザから発信されたURIによる要求(HTTPリクエスト)を、どのコントローラーのどのアクションに引き渡すかを判断し振り分けること。ルートを設定するにはconfigディレクトリの中のroutes.rbというファイルを使う。

ルーティング情報の見方は前にも書いた↓

ud-ike.hatenablog.com

リソースフルルート

モデルを介したリソースに対するデータの追加、既存データの更新、削除、一覧表示といったお決まりの作業をリソースフルルートと呼ぶ。

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')

アプリケーションルートの表示ルール

優先度が高い順に、以下のように表示される。

  1. publicディレクトリにindex.htmlが存在する場合、public/index.htmlを表示する
  2. routes.rbにルート設定がされている場合、ルートに従って表示する
  3. ルート設定がされていない場合、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ヘルパーとして使用できる。

f:id:ud_ike:20201015213929p:plain

Prefixがnew_userのとき、ルーティングヘルパーは

となる。