DAY11 requireメソッド / permitメソッド

TOKHEE·2024년 3월 29일
  • これらの2つのメソッドは、Ruby on RailsでStrong Parametersパターンを実装する上で核となる
  • Strong Parametersは、アプリケーションのモデルをMass Assignmentの脆弱性から守る安全な方法を提供
  • コントローラーでユーザーから受け取ったデータをフィルタリングし、信頼できるフィールドのみがモデルに割り当てられることを保証

require メソッド

  • requireメソッドは、ActionController::Parametersオブジェクトで特定のキーを探すために使用される
  • 主にフォームデータのように特定の構造を持つパラメータで使用される
  • requireを使用して特定のキーを要求すると、そのキーが存在しない場合はActionController::ParameterMissing例外が発生する
    => これにより、必須パラメータが欠けていることを知らせることができる

  • ユーザー作成フォームで、userというキーにグループ化されたユーザー情報を送信する場合
  • この場合、requireメソッドを使用してparamsオブジェクトからuserキーを要求する
user_params = params.require(:user)
  • このコードは、paramsハッシュから:userキーが必要であることを意味する
    => このキーが存在しない場合は例外が発生する
  • :userキーの下にあるデータはuser_params変数に保存される。

permit メソッド

  • permitメソッドは、requireメソッドで返されたオブジェクトに対して呼び出され、許可されるパラメータのキーを指定する
  • 安全に許可したいフィールドのみを指定でき、残りは自動的にフィルタリングされる。
  • アプリケーションでMass Assignmentの脆弱性を防ぐ

def user_params
  params.require(:user).permit(:name, :email, :password)
end
  • permit(:name, :email, :password)は、:userキーの下の:name:email:passwordフィールドのみを許可する
  • ユーザーがフォームを通じて送信するデータの中で、これら3つのフィールドのみがUserモデルに割り当て可能
    => 他のすべてのパラメータは無視される。
  • 悪意のあるユーザーが予期せぬフィールドを変更することを防ぐ
    => 例) 自分の権限を管理者に変更しようとする試みをブロック

使用例

  • UsersControllercreateアクションを実装する際に、requirepermitを使用する方法
  • このコードは、createアクションでuser_paramsメソッドを呼び出し、安全にフィルタリングされたパラメータをUser.newメソッドに渡す
class UsersController < ApplicationController
  def create
    @user = User.new(user_params)
    if @user.save
      # 成功した場合の処理
    else
      # 失敗した場合の処理
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :email, :password)
  end
end

0개의 댓글