Я пытаюсь реализовать функции аудита для некоторых моделей своих рельсов и хранить их во внешней базе данных событий (мы выбрали BigQuery).Функция аудита для моделей рельсов
Каждое событие должно быть очень простой: before_json, after_json, дифференциал, действие, object_id
Итак, я начал строить эту проблему, что я планирую добавить в мои модели:
module Auditable
extend ActiveSupport::Concern
included do
before_destroy {audit(:destroy)}
after_validation on: :update do
audit(:update)
end
after_validation on: :create do
audit(:create)
end
def audit(action)
EventSender.send(before_json, self.to_json, diff, action, self.id)
end
end
end
Единственное, что я не знаю, как реализовать, - это получить состояние до объекта, чтобы я мог заполнить соответствующие поля и разницу между двумя состояниями.
Любые идеи о том, как я могу это сделать?