only
- Only audit the given attributes
except
- Excludes fields from being saved in the audit log. By
default, Audited will audit all but these
fields:
[self.primary_key, inheritance_column, 'lock_version', 'created_at', 'updated_at']
You can add to those by passing one or an array of fields to skip.
class User < ActiveRecord::Base audited :except => :password end
protect
- If your model uses attr_protected
, set
this to false to prevent Rails from raising an error. If you declare
attr_accessible
before calling audited
, it will
automatically default to false. You only need to explicitly set this if
you are calling attr_accessible
after.
require_comment
- Ensures that audit_comment is supplied
before any create, update or destroy operation.
class User < ActiveRecord::Base audited :protect => false attr_accessible :name end
# File lib/audited/auditor.rb, line 46 def audited(options = {}) # don't allow multiple calls return if self.included_modules.include?(Audited::Auditor::AuditedInstanceMethods) options = { :protect => accessible_attributes.blank? }.merge(options) class_attribute :non_audited_columns, :instance_writer => false class_attribute :auditing_enabled, :instance_writer => false class_attribute :audit_associated_with, :instance_writer => false if options[:only] except = self.column_names - options[:only].flatten.map(&:to_s) else except = default_ignored_attributes + Audited.ignored_attributes except |= Array(options[:except]).collect(&:to_s) if options[:except] end self.non_audited_columns = except self.audit_associated_with = options[:associated_with] if options[:comment_required] validates_presence_of :audit_comment, :if => :auditing_enabled before_destroy :require_comment end attr_accessor :audit_comment unless accessible_attributes.blank? || options[:protect] attr_accessible :audit_comment end has_many :audits, :as => :auditable, :class_name => Audited.audit_class.name attr_protected :audit_ids if options[:protect] Audited.audit_class.audited_class_names << self.to_s after_create :audit_create if !options[:on] || (options[:on] && options[:on].include?(:create)) before_update :audit_update if !options[:on] || (options[:on] && options[:on].include?(:update)) before_destroy :audit_destroy if !options[:on] || (options[:on] && options[:on].include?(:destroy)) # Define and set an after_audit callback. This might be useful if you want # to notify a party after the audit has been created. define_callbacks :audit set_callback :audit, :after, :after_audit, :if => lambda { self.respond_to?(:after_audit) } attr_accessor :version extend Audited::Auditor::AuditedClassMethods include Audited::Auditor::AuditedInstanceMethods self.auditing_enabled = true end
# File lib/audited/auditor.rb, line 96 def has_associated_audits has_many :associated_audits, :as => :associated, :class_name => Audited.audit_class.name end