Paper_trail Gem 在将 Ransack 升级到 4.0.0 时停止工作

Paper_trail gem stopped working when upgraded ransack to 4.0.0

提问人:mirelon 提问时间:9/26/2023 更新时间:10/1/2023 访问量:66

问:

在我的 rails 7.0.4 应用程序中,我使用:

  • 主动管理员 3.0.0
  • 兰萨克 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 之前,一切正常。 升级后,我在每个页面上都收到此错误: “Ransack 需要......属性明确列入允许列表为 ...”。 除了历史记录页面之外,所有页面都可以轻松修复此问题,其中错误状态如下:

Ransack 需要将 PaperTrail::Version 属性明确列入允许列表 搜索。在模型中定义一个类方法,注意你不希望搜索的项目(对于 示例、 、 或 其他敏感信息)。您可以使用以下内容作为基础:ransackable_attributesPaperTrail::Versionencrypted_passwordpassword_reset_tokenowner

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.rbransackable_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

但错误保持不变。如何解决?

Ruby-on-Rails Ruby ActiveAdmin Ransack Paper-Trail-gem

评论


答:

0赞 mirelon 10/1/2023 #1

有点傻,但重新启动服务器解决了这个问题。

由于我作为初始值设定项,因此如果不重新启动服务器,更改就不会生效。即使没有重新启动,对其他模型的更改也会生效。PaperTrail::Version