Мы только начали использовать гем PaperTrail и заметили, что 75% записей в таблица версий имеет нуль для столбца object_changes
. Есть идеи, почему это происходит и как мы можем это остановить?
Использование Rails 5.1 и PaperTrail 10.1.
Мы только начали использовать гем PaperTrail и заметили, что 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 связаны с событиями касания атрибутов, которые были пропущены. Единственное решение, которое я придумал для этого, — отслеживать версии только при создании, обновлении и уничтожении.
Я также обнаружил, что у нас есть повторяющиеся записи версий. Мы включили PaperTrail для всех моделей, поместив нижеследующее в ApplicationRecord
, это привело к созданию дубликатов версий, если класс унаследован от другого. т.е. если у вас есть 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