在我的rails 7.0.4应用程序中,我用途:
- Activeadmin 3.0.0
- Ransack 4.0.0
- paper_trail 15.0.0
我有过滤和排序的数据更改历史的页面:
ActiveAdmin.register PaperTrail::Version do
menu label: 'History'
actions :index
index title: 'History' do
id_column
column :item
column :event
column 'Author' do |version|
User.where(id: version.whodunnit.to_i).first
end
column 'Changes', :object_changes
column :created_at
end
filter :item_type
filter :item_id, as: :numeric
filter :created_at, input_html: {autocomplete: :off}
filter :whodunnit, label: 'Author', as: :numeric
filter :object_changes
end
在我升级到activeadmin 3.0.0和ransack 4.0.0之前,一切都很好。升级后,我在每个页面上都得到这个错误:“搜查需要... attributes explicitly allowlisted as ...".这是很容易修复的所有页面,除了历史页面,其中的错误状态:
Ransack需要PaperTrail::Version属性显式地允许将其列为可搜索的。在你的PaperTrail::Version
模型中定义一个ransackable_attributes
类方法,注意你不想搜索的项目(例如,encrypted_password
,password_reset_token
,owner
或其他敏感信息)。您可以使用以下内容作为基础:
class PaperTrail::Version < ApplicationRecord
# ...
def self.ransackable_attributes(auth_object = nil)
["created_at", "event", "id", "item_id", "item_type", "object", "object_changes", "whodunnit"]
end
# ...
end
我的config/initializers/paper_trail.rb
没有太大的不同,我认为我正确地添加了ransackable_attributes
方法:
module PaperTrail
class Version < ActiveRecord::Base
def self.ransackable_attributes(auth_object = nil)
%w[created_at event id item_id item_type object object_changes whodunnit]
end
def user
User.where(id: self.whodunnit.to_i).first
end
end
end
PaperTrail::Model::ClassMethods.module_eval do
alias_method :old_has_paper_trail, :has_paper_trail
def has_paper_trail(options = {})
options[:ignore] ||= []
options[:ignore] += [:created_at, :updated_at, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :sign_in_count]
old_has_paper_trail(options)
end
end
但错误是一样的。怎么修?
1条答案
按热度按时间ktecyv1j1#
有点傻,但重新启动服务器解决了这个问题。
因为我使用
PaperTrail::Version
作为初始化器,所以在没有重新启动服务器的情况下,更改不会生效。对其他模型的更改即使没有重新启动也会生效。