Techioz Blog

Ransack には、検索可能として明示的に許可リストに登録された 関連付けが必要です

概要

gem「ipaddress」をインストールするまで私のコードは実行され、機能していましたが、以前に作成したモデルはすべて次のエラーが発生するようになりました。

Ransack には、明示的に許可リストに登録された 関連付けが必要です 検索可能。

User で ransackable_associations クラス メソッドを定義します。 モデル、検索したくないアイテムに注意してください ( たとえば、encrypted_password、password_reset_token、owner、または その他の機密情報)。以下をベースとして使用できます。

class User < ApplicationRecord

  # ...

  def self.ransackable_associations(auth_object = nil)
    ["comments", "created_by", "favorites", "impressions_by_user", "updated_by", "user_group"]
  end

  # ...

The issue I have with this is I need a dynamic to do this instead of having to redo this for every single model that I have created.

解決策

モデルを ActiveRecord::Base の使用から ApplicationRecord の使用に変更し、次のコードを含む Application_Record.rb ファイルを作成する必要がありました。

class ApplicationRecord < ActiveRecord::Base
  primary_abstract_class

  Rails.logger.info("INSIDE APPLICATION RECORD");
  self.abstract_class = true

  def self.ransackable_attributes(auth_object = nil)
    column_names + _ransackers.keys
  end

  def self.ransackable_associations(auth_object = nil)
    reflect_on_all_associations.map { |a| a.name.to_s } + _ransackers.keys
  end
end

次に、イニシャライザの印象派拡張機能を微調整して、次のメソッドを追加する必要がありました。

def ransackable_associations(auth_object = nil)
  Rails.logger.info("WITHIN RANSACK ASSOCIATION")
  super + %w[impressionable]
end