Techioz Blog

指示に従っているだけでアクティブな管理者 gem エラー メッセージが表示される

概要

Ruby 3.1.3、Rails 7.0.5、activeadmin 3.0を使用しています。

activeadmin Web サイトのインストール手順に従っただけですが、次のエラーが発生しました。

ActionView::Template::Error (Ransack needs AdminUser attributes explicitly allowlisted as
searchable. Define a `ransackable_attributes` class method in your `AdminUser`
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:

ruby
class AdminUser < ApplicationRecord

  # ...

  def self.ransackable_attributes(auth_object = nil)
    ["created_at", "email", "encrypted_password", "id", "remember_created_at", "reset_password_sent_at", "reset_password_token", "updated_at"]
  end

  # ...

end

):
    1: # frozen_string_literal: true
    2: insert_tag renderer_for(:index)

指示に従おうとしましたが、同じエラーが発生しましたが、関数内の配列が空になりました。

解決策

active_admin 2.x から 3.0 にアップグレードするときに同じ問題が発生しました。

新しいバージョンでは、新しいバージョンの ransack (v4) が使用されています。このバージョンでは、検索対象となるモデル内の属性と関連付けの許可リストを明示的に宣言する必要があるため、重大な変更が含まれています (変更ログはこちら)。

ApplicationRecord モデルのすべての属性をホワイトリストに登録すると、アプリが再び実行されるようになります。

class ApplicationRecord < ActiveRecord::Base
  # ...

  def self.ransackable_attributes(auth_object = nil)
    authorizable_ransackable_attributes
  end

  def self.ransackable_associations(auth_object = nil)
    authorizable_ransackable_associations
  end
end

ただし、コードベース上の特定のモデルごとにこれらのリストをカスタマイズしたい場合があります。