Railsのコントローラについて
はじめに
ユーザーのフォロー機能を作っていて、コントローラがイマイチ掴めていないと感じたので学習。そのまとめ。
コントローラの役割
めっちゃ簡単に言うと、ルーティングから指名されたアクションを行うのがコントローラ。
具体的な流れは以下。
- クライアントから、アプリケーションへリクエストが飛んでくる
- どのURIに、何のHTTPメソッドで来たリクエストなのかを解析し、ルーティング表に従って、コントローラとアクションを指名する
- 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に改めてリクエストを送信することもできる。