2025-06-21 Rails8 で入った params.expect が便利
Rails8 で入ったparams.expectが便利な件 » Rails 8 introducing params#expect | by Irfan Ahmed | Medium https://t.co/7Svpapd5aG
— toshimaru (@toshimaru_e) June 19, 2025
実際に使ってみる
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
andparams#expect!
will raise an error if the expected parameters are missing:
ref. Rails 8 introducing params#expect | by Irfan Ahmed | Medium
params.expect!
raisesActionController::ExpectedParameterMissing
params.expect
raisesActionController::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