Railsのコントローラについて

はじめに

ユーザーのフォロー機能を作っていて、コントローラがイマイチ掴めていないと感じたので学習。そのまとめ。

引用:Action Controller の概要 - Railsガイド

コントローラの役割

めっちゃ簡単に言うと、ルーティングから指名されたアクションを行うのがコントローラ。

具体的な流れは以下。

  1. クライアントから、アプリケーションへリクエストが飛んでくる
  2. どのURIに、何のHTTPメソッドで来たリクエストなのかを解析し、ルーティング表に従って、コントローラとアクションを指名する
  3. railsは指名されたコントローラのインスタンスを生成し、アクション名と同じ名前のメソッドを実行する(データをモデルから取得したり、モデルに保存するなど作業を行い、最後にビューを用いてHTML出力する)。

命名規則

コントローラ名は複数形でつけるのが基本。 別に単数系でもできるが、以下の理由で複数形にしておいた方が良い。

複数形にしておくと、resourcesなどのデフォルトのルーティングジェネレータがそのまま利用でき、名前付きルーティングヘルパーの用法がアプリケーション全体で一貫する。 コントローラ名の最後が複数形になっていないと、たとえばresourcesで簡単に一括ルーティングできず、:pathや:controllerをいちいち指定しなければならない。

アクションについて

大体の場合、ユーザーから送信されたデータやその他パラメータにアクセスして何かしらの処理を行った後、どのviewをレンダリングするか指定する。

アクションで受け取れるパラメータ

getパラメータとpostデータの二種類ある。どちらもparamsハッシュで受け取れる。 どちらのパラメータも「全て文字列」の型になることに注意。

  • getパラメータ

クエリパラメータが?status=activatedの場合、params[:status] = "activated"となる。

  • postパラメータ

input type="text" name="client" value="Acme"の時、params[:client] = "Acme"となる。

どのviewをレンダリングするか

特に指定しなかった場合、アクション名.html.erbをレンダリングする。

renderメソッドを使うと、レンダリングするビューを指定できる。

もしくは、redirect_toで、別のURLに改めてリクエストを送信することもできる。