実際に使ってみる

params = ActionController::Parameters.new(id: [1,2]) #=> #<ActionController::Parameters {"id" => [1, 2]} permitted: false>
params.expect id: [] #=> [1, 2]
params.expect :id # param is missing or the value is empty or invalid: id (ActionController::ParameterMissing)
params = ActionController::Parameters.new(id: 1) #=> #<ActionController::Parameters {"id" => 1} permitted: false>
params.expect :id #=> 1
params.expect :x #param is missing or the value is empty or invalid: x (ActionController::ParameterMissing)

expect to safely permit and require parameters in one step.

ref. ActionController::Parameters | RailsDoc(β)

expect vs expect!

Both params#expect and params#expect! will raise an error if the expected parameters are missing:

ref. Rails 8 introducing params#expect | by Irfan Ahmed | Medium

  • params.expect! raises ActionController::ExpectedParameterMissing
  • params.expect raises ActionController::ParameterMissing
params = ActionController::Parameters.new(posts: [{ id: 1 }])
params.expect!(:id) # => ActionController::ExpectedParameterMissing: param is missing or the value is empty
params.expect(:id) # => ActionController::ParameterMissing: param is missing or the value is empty