2022-06-21 Rails params.require vs params.fetch
Rails params.require vs params.fetch
Rails のStrong Parametersについて復習。
scaffold される controller が params.require
と params.fetch
のパターンがある。
rails/controller.rb.tt at 10a2c77e901eb15b486f2c72fd9997bd0e2d506c · rails/rails
RailsのStrong Parametersを調べる - Qiita
params.require
params.require(:user).permit(:name, :email, recommend_book: [:user_id, :comment])
params.fetch
params.fetch(:user, {}).permit(:name, :email, :password)
userパラメータがなかったときはActionController::ParameterMissingのエラーが起きるようになっています。 上記の設定をしてあるとuserパラメータの代わりに{}がデフォルト値として評価されるようになります。
違うパラメータを許可しない
config.action_controller.action_on_unpermitted_parameters = :raise
Action Controller の概要 - Railsガイド
「paramsの値には許可されたスカラー値の配列を使わなければならない」ことを宣言するには、以下のようにキー1に空配列を対応付けます。
params.permit(id: [])
下記のように permit 省略でもかけるが気をつけるように。
ハッシュパラメータやその内部構造の正しいキーをすべて明示的に宣言できない場合や、すべて宣言するのが面倒な場合があります。次のように空のハッシュを割り当てることは一応可能です。
params.permit(preferences: {})
パラメータのハッシュ全体を許可したい場合は、permit!メソッドが使えます。
params.require(:log_entry).permit!