params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要
1253 views
Post
Web apps on Rails.
以下のコードから分かるとおり、redirect_backはredirect_back_or_toをラップしているだけです。
https://github.com/rails/rails/blob/v7.0.4/actionpack/lib/action_controller/metal/redirecting.rb#L96
普通はfallback_locationを指定する必要があるはずですので、第1引数にfallback_locationを指定してredirect_back_or_toを呼び出した方が素直のように思います。
Rails8では、
requireとpermitに代わるより安全な新しいメソッドとして、strong parametersへexpectが導入されました。expectでは、安全面への配慮から、配列のパラメータを指定する方法がpermitに比べ厳格化されています。 具体的には、配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要となりました。配列のパラメータを許可する具体的な方法(引用元:
expectのAPIドキュメント)は以下の通りです。なお、安全のためにexpectがこの二重の括弧の記法を採用した背景については、Rails 8: strong parametersの新しいparams.expectの使い方(翻訳)を参照ください。
ちなみに、RuboCopに
requireとpermitの組み合わせからexpectへの書き換えを自動でやってもらうことは可能ですが、配列パラメータの許可に関してはRuboCopが自動書き換えに失敗する場合があります。その理由は以下の記述は、配列のパラメータも配列でないパラメータも許可してしまうため、RuboCopとしては配列なのかそうでないのかの判定が機械的に行えないためであると考えられます。
より詳しくは、前述の記事のこちらの箇所を参照ください。