params.expectで配列のパラメータを許可するには明示的に二重の角括弧([[ :属性名 ]])が必要
82 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としては配列なのかそうでないのかの判定が機械的に行えないためであると考えられます。
より詳しくは、前述の記事のこちらの箇所を参照ください。