【Rails】Model.newにparamsを渡してしまうのは危険

こんなコードは危ない

# controllers/users_controller.rb
def create
  @user = User.new(params[:user])
  ...
end

ユーザー情報すべてを渡してしまっているため、
管理者フラグを含めるカラムが存在する場合、
リクエストにadmin=1相当のデータを含めることで、
意図しないユーザーに意図しない権限を渡してしまう。

どう防ぐのか

Strong Parametersで意図的に、リクエストのどのデータを渡すか明示する。

# controllers/users_controller.rb
def create
  # Strong ParametersをUser.newに渡している
  @user = User.new(user_params)
  ...
end

# 外部から変更されたくないのでprivateメソッドにする
private
  def user_params
    params.require(:users).permit(:name, :email)
  end