簡體   English   中英

paper_trail gem 使用 object_changes nil 保存版本

[英]paper_trail gem saving versions with object_changes nil

我們剛剛開始使用PaperTrail gem ,並注意到版本表中 75% 的記錄的object_changes零。 知道為什么會發生這種情況以及我們如何阻止它嗎?

使用 Rails 5.1 和 PaperTrail 10.1。

根據@Scott 的回答,創建一個初始化程序並設置 PaperTrail 的全局配置(僅限 10+ 版本)以忽略:touch事件。

這在我們的數據庫中創建了數百萬個不必要的版本。

config/initializers/paper_trail.rb

PaperTrail.config.has_paper_trail_defaults = {
  on: %i[create update destroy]
}

nil 對象更改是由於跳過的屬性上的觸摸事件。 我想出的唯一解決方案是僅在創建、更新和銷毀時跟蹤版本。

我還發現我們有重復的版本記錄。 我們通過將以下內容放入ApplicationRecord來為所有模型打開 PaperTrail,如果一個類繼承自另一個類,這會導致創建重復版本。 即,如果您有class Foo < Bar並執行Bar.create將創建 2 個相同的版本記錄。

ApplicationRecord初始版本

def self.inherited(subclass)
  super
  subclass.send(:has_paper_trail)
end

最終版本

def self.inherited(subclass)
  classes_to_skip = %w[Foo]
  attributes_to_skip = [:bar_at]
  on_actions = [:create, :update, :destroy]

  super
  unless classes_to_skip.include?(subclass.name)
    subclass.send(:has_paper_trail, on: on_actions, ignore: attributes_to_skip)
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM