我的代码一直在运行并工作,直到我安装了 gem 'ipaddress',但现在我之前创建的模型都出现以下错误
Ransack 需要
在您的
ransackable_associations
中定义一个 User
类方法
模型,留意您不想搜索的项目(例如
例如,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
从 ransack 4 开始,ransack 需要显式地将关联和属性列入白名单。此合并请求引入了更改。
如果您知道自己在做什么,可以通过将其恢复为 4.0 之前的代码来禁用该行为。
# app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
# ...
def self.ransackable_associations(auth_object = nil)
@ransackable_associations ||= reflect_on_all_associations.map { |a| a.name.to_s }
end
def self.ransackable_attributes(auth_object = nil)
@ransackable_attributes ||= column_names + _ransackers.keys + _ransack_aliases.keys + attribute_aliases.keys
end
end