- これらの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モデルに割り当て可能
=> 他のすべてのパラメータは無視される。
- 悪意のあるユーザーが予期せぬフィールドを変更することを防ぐ
=> 例) 自分の権限を管理者に変更しようとする試みをブロック
使用例
UsersControllerでcreateアクションを実装する際に、requireとpermitを使用する方法
- このコードは、
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