##1.コントローラの役割
Action Controllerは、MVCモデルのCに相当します。MVCとは、M(Model)、V(View)、C(Controller)の3つの要素のことであり、リクエストを処理するコントローラがルーティング設定によって指名されると、コントローラはリクエストの意味を理解し、適切な出力を行なうための責任を持ちます。これらの処理はほとんどAction Controllerが行い、しかも吟味された規則を使うので、リクエストの処理は可能な限り素直な方法で行われます。
つまり、コントローラー層では、ブラウザなどから発行されたHTTPリクエストの宛先となっているURLや、HTTPメソッド(GETやPOSTなど)を元に、routes.rbで定義された「そのリクエストを処理する担当箇所」を特定し、どのコントローラー(クラス)の、どのアクション(メソッド)が処理をするのか決定する層、ということです。
1.クライアントからのリクエストをWebサーバを介して受け取るます(routes)
2.ルーティング機能がそのリクエストの処理を行うべきコントローラー(クラス)とアクション(メソッド)を特定し、アクションを呼び出します。
3.アクション(メソッド)では必要に応じてモデルを利用します。例:
def new
@user = User.new
end
4.モデルがデータベースで永続化されている場合、モデルはデータベースへの書き込みや読み出しも担当します。例:
def index
@tasks = Task.all
end
5.アクションごとに、対応するビューテンプレートを用いてHTML等を作成します。例:show.html.erb
6.コントローラがレスポンスを作成し、Webサーバを介してクライアントへ返します。
##2.コントローラの命名規則
Railsのコントローラ名(ここでは「Controller」という文字は除く)は、基本的に名前の最後の部分を「複数形」します。例えば、ClientsControllerの方がClientControllerより好ましく、SiteAdminsControllerはSiteAdminControllerやSitesAdminsControllerよりも好ましいということです。
##3.メソッドとアクション
newメソッドの内容が空でも正常に動作します。これは、Railsではnewアクションで特に指定のない場合にはnew.html.erbビューをレンダリングするようになっているからです。Clientを新規作成すると、newメソッドはビューでアクセス可能な@clientインスタンス変数を1つ作成できるようになります。
def new
@client = Client.new
end
##4.パラメータ
コントローラのアクションでは、ユーザーから送信されたデータやその他のパラメータにアクセスして何か作業を行なうのが普通です。Railsに限らず、一般にWebアプリケーションでは2種類のパラメータを扱うことができます。
1番目は、URLの一部として送信されるパラメータで、「クエリ文字列パラメータ」と呼ばれます。クエリ文字列は、常にURLの"?"の後に置かれます。
2番目のパラメータは、「POSTデータ」と呼ばれるものです。POSTデータは通常、ユーザーが記入したHTMLフォームから受け取ります。これがPOSTデータと呼ばれているのは、HTTP POSTリクエストの一部として送信されるからです。Railsでは、クエリ文字列パラメータの受け取り方とPOSTデータの受け取り方に違いはありません。どちらもコントローラ内ではparamsという名前のハッシュでアクセスできます。
参照:Railsガイド:https://railsguides.jp/action_controller_overview.html