🌟
Ransack needs attributes explicitly allowlisted... の対処法
Ransack needs attributes explicitly allowlisted as searchableとエラーが出た時の対処法
Ransackv4.0.0でBreaking Changeがありました。
[SECURITY] Require explict allowlisting of attributes and associations
(属性と関連付けのための明示的な許可リストが必要です)
今までは明示的な許可がなくても検索やソートが可能だったのですが、4.0.0から許可リストを作成しないと以下のようなエラーが発生します。
Ransack needs HogehogeModel attributes explicitly allowlisted as
searchable. Define a `ransackable_attributes` class method in your `HogehogeModel`
model, watching out for items you DON'T want searchable (for
example, `encrypted_password`, `password_reset_token`, `owner` or
other sensitive information). You can use the following as a base:
class HogehogeModel < ApplicationRecord
# ...
def self.ransackable_attributes(auth_object = nil)
["created_at", "id", "hogehoge_1", "hogehoge_2", "hogehoge_3", "updated_at"]
end
# ...
end
エラー文に書いてある通りですが、絞り込み検索したいモデルにransackable_attributes
メソッドを作成して、許可するカラムを書いてねということらしいです。
詳しくはドキュメントのAuthorization (allowlisting/denylisting)を見るのが良いかもしれません。
親モデルや子モデルを検索したい場合
親モデルや子モデルを検索しようとすると以下のようなエラーが発生します。
Ransack needs HogehogeModel associations explicitly allowlisted as
searchable. Define a `ransackable_associations` class method in your `HogehogeModel`
model, watching out for items you DON'T want searchable (for
example, `encrypted_password`, `password_reset_token`, `owner` or
other sensitive information). You can use the following as a base:
class HogehogeModel < ApplicationRecord
# ...
def self.ransackable_associations(auth_object = nil)
["child_hogehoges", "hogehoge"]
end
# ...
end
こちらも同様にransackable_associations
メソッドに許可するモデルを書いてあげれば解決しました
エラー文やドキュメントを見ずに対応していたのですごく時間がかかったしまいましたが、ちゃんと読まないとダメですねー...
Discussion