ruby Ransack需要< Model>明确允许的关联列出为可搜索

vecaoik1  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(110)

后台

我的代码一直运行和工作,直到我安装了gem 'ipaddress',但现在我以前创建的模型现在都得到以下错误
Ransack需要<MODEL_NAME>明确地允许将关联列为可搜索的。
在你的User模型中定义一个ransackable_associations类方法,注意你不想搜索的项目(例如,encrypted_passwordpassword_reset_tokenowner或其他敏感信息)。您可以使用以下内容作为基础:

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.

字符串

kb5ga3dv

kb5ga3dv1#

解决方案

我必须将模型从使用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

字符串
然后不得不调整初始化器中的impressionist扩展,添加以下方法

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

相关问题