Sha256: 1495d760107ccb8777b1f39617e40323a4e0d01348149fb1eeb0dbabb3310e0b
Contents?: true
Size: 1.39 KB
Versions: 3
Compression:
Stored size: 1.39 KB
Contents
module Auditable extend ActiveSupport::Concern IGNORE = ['updated_at'] included do has_many :audits, as: :auditable end # user: { # id: 1, # changes: { # name: ['a', 'b'] # } # } def save_audits(operator: current_operator, include: [], **extra_options) audit = self.audits.build audit.audited_changes = self.saved_changes.except(*IGNORE) audit.unconfirmed_changes = self.changes if include.present? result = {} include.each do |key| targets = self.send(key) result[key] = [] Array(targets).each do |target| _saved_changes = target.saved_changes.except(*IGNORE) _changes = target.changes if _saved_changes.present? || _changes.present? result[key] << { id: target.id, saved_changes: _saved_changes, changes: _changes } end end end audit.related_changes = result end if self.destroyed? audit.action = 'destroy' end audit.operator_type = operator.class.name audit.operator_id = operator.id audit.note = extra_options.delete(:note) audit.controller_path = extra_options.delete(:controller_path) audit.action_name = extra_options.delete(:action_name) audit.remote_ip = extra_options.delete(:remote_ip) audit.extra = extra_options audit.save end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rails_audit-1.0.3 | app/models/concerns/auditable.rb |
rails_audit-1.0.2 | app/models/rails_audit/concerns/auditable.rb |
rails_audit-1.0.1 | app/models/rails_audit/concerns/auditable.rb |