Railsのコントローラ
Railsのコントローラは、MVCアーキテクチャにおける「C」の部分を担います。ユーザーからのリクエストを受け取り、モデルとビューと連携して、適切なレスポンスを返すのが主な役割です。
コントローラの役割
- リクエストの処理: ルーティングからリクエストを受け取ります。
- ビジネスロジックの呼び出し: モデルを介して、データの取得や更新などのビジネスロジックを実行します。
- データの準備: ビューに渡すためのインスタンス変数(
@で始まる変数)を準備します。 - レスポンスの生成: ビューをレンダリングするか、リダイレクトを行うことで、HTTPレスポンスを生成します。
コントローラの作成
コントローラは、rails generate controllerコマンドで生成できます。
bash
bin/rails generate controller Posts index showこれにより、app/controllers/posts_controller.rbファイルが生成され、indexとshowアクションが定義されます。
ruby
# app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
endパラメータの受け取り
コントローラは、paramsハッシュを通じて、リクエストのパラメータ(URLのクエリパラメータやフォームの送信データなど)にアクセスできます。
params[:id]のようにして、特定のパラメータを取得します。
Strong Parameters
セキュリティ上の理由から、マスアサインメント(一度に複数の属性を更新すること)を行う際には、Strong Parametersという仕組みを使用します。これにより、許可されたパラメータのみがモデルに渡されるようになります。
ruby
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render :new
end
end
private
def post_params
params.require(:post).permit(:title, :body)
endrequireでトップレベルのキーを指定し、permitで許可する属性のリストを指定します。
レンダリングとリダイレクト
render: 指定されたビューテンプレートをレンダリングして、レスポンスを生成します。rubyrender :indexredirect_to: ブラウザに別のURLへのリダイレクトを指示します。rubyredirect_to posts_path
before_action
before_actionは、特定のアクションが実行される前に共通の処理を実行するためのフィルタです。例えば、複数のアクションで特定のデータが必要な場合などに使用します。
ruby
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
# ...
private
def set_post
@post = Post.find(params[:id])
end
endまとめ
コントローラは、Railsアプリケーションの心臓部であり、リクエストのライフサイクルを管理します。paramsの扱いやStrong Parametersによるセキュリティ対策、renderとredirect_toの使い分けを理解することが重要です。