[Rails]params.fetchとparams.requireのち外
fetchはキーが存在せず第二引数で指定されたデフォルト値を返す。
第二引数の指定が無い場合はActionController::ParameterMissingエラーになる
なので、ストロングパラメーターの対象にデフォルト値を設定してエラーを出力したくない場合に使う。
requireはfetchのように第二引数でデフォルト値は指定できないのでキーが存在しなければエラーになる。
params = ActionController::Parameters.new(book: { title: 'test driven development' })
# fetch
params.fetch(:book)
# => #<ActionController::Parameters {"title"=>"test driven development"} permitted: false>
params.fetch(:none)
# => param is missing or the value is empty: none (ActionController::ParameterMissing)
params.fetch(:none, 'api design patterns')
# => "api design patterns"
params.fetch(:none) { 'api design patterns' }
# => "api design patterns"
# require
params.require(:none)
# => param is missing or the value is empty: none (ActionController::ParameterMissing)
[Rails]明示的に許可されていないパラメータが渡された場合にログ出力or例外にする設定
config/environments/xxx.rb に次の設定を追加する
test環境とdevelopment環境のデフォルト値は :log、それ以外では false が設定される。
- false: 何もしない
:log: ActiveSupport::Notifications.instrumentイベントをunpermitted_parameters.action_controllerで発火し、DEBUGレベルでログ出力する:raise: ActionController::UnpermittedParameters例外をraiseする
config.action_controller.action_on_unpermitted_parameters = :raise
【参考】