Ruby

Ruby on Rails Audit Logging Guide

Add immutable audit trails to your Ruby on Rails application with the AuditKit Ruby gem. ActiveRecord callbacks, controller concerns, and Sidekiq integration for background logging.

Overview

Ruby on Rails remains one of the most productive frameworks for building B2B SaaS applications. The AuditKit Ruby gem provides ActiveRecord callbacks for automatic model change tracking, controller concerns for request logging, and Sidekiq integration for non-blocking event delivery. The gem follows Rails conventions with generators, configuration initializers, and concern-based composition.

Getting started

1

Install the gem

Add AuditKit to your Gemfile.

Ruby
# Gemfile
gem 'auditkit'

# Then run:
bundle install
rails generate auditkit:install
2

Configure the initializer

Set up AuditKit in the generated initializer.

Ruby
# config/initializers/auditkit.rb
AuditKit.configure do |config|
  config.api_key = ENV['AUDITKIT_API_KEY']
  config.tenant_resolver = ->(request) { request.env['current_tenant']&.id }
  config.async = true  # Use Sidekiq for background delivery
end
3

Add model tracking

Include the Auditable concern in your models.

Ruby
class Document < ApplicationRecord
  include AuditKit::Auditable

  auditable fields: [:title, :status, :classification],
             on: [:create, :update, :destroy]
end
4

Log custom events

Capture explicit audit events in controllers or services.

Ruby
class DocumentsController < ApplicationController
  def approve
    document = Document.find(params[:id])
    document.update!(status: 'approved')

    AuditKit.log(
      action: 'document.approved',
      actor: { id: current_user.id.to_s, email: current_user.email },
      target: { type: 'document', id: document.id.to_s },
      metadata: { title: document.title }
    )
  end
end

Complete example

Here is a complete example showing AuditKit integrated into a Ruby on Rails application with authentication logging, data access tracking, and explicit event capture.

Ruby
# config/initializers/auditkit.rb
AuditKit.configure do |config|
  config.api_key = ENV['AUDITKIT_API_KEY']
  config.tenant_resolver = ->(request) { request.env['current_tenant']&.id }
  config.async = true
end

# app/models/invoice.rb
class Invoice < ApplicationRecord
  include AuditKit::Auditable

  belongs_to :customer
  auditable fields: [:amount, :status, :due_date], on: [:create, :update, :destroy]
end

# app/controllers/invoices_controller.rb
class InvoicesController < ApplicationController
  include AuditKit::ControllerConcern

  def create
    @invoice = Invoice.create!(invoice_params)
    head :created
  end

  def refund
    @invoice = Invoice.find(params[:id])
    previous_status = @invoice.status
    @invoice.update!(status: 'refunded')

    AuditKit.log(
      action: 'invoice.refunded',
      actor: { id: current_user.id.to_s, email: current_user.email },
      target: { type: 'invoice', id: @invoice.id.to_s },
      metadata: {
        invoice_number: @invoice.number,
        amount: @invoice.amount.to_s,
        previous_status: previous_status,
      }
    )

    head :ok
  end
end

Common patterns

Auditable concern for ActiveRecord model change tracking

ControllerConcern for automatic request logging

Sidekiq integration for non-blocking event delivery

Devise integration for authentication event capture

Pundit/CanCanCan integration for authorization logging

Multi-tenant support with Apartment or acts_as_tenant

Frequently asked questions

How do I add audit logging to a Rails application?

Add the auditkit gem to your Gemfile, run the install generator, and configure your API key. Include AuditKit::Auditable in models for automatic change tracking, or call AuditKit.log() for explicit events.

Does AuditKit support background job delivery in Rails?

Yes. The AuditKit gem integrates with Sidekiq for non-blocking event delivery. Set config.async = true in the initializer and events will be queued as Sidekiq jobs.

More integration guides

Related resources

Add audit logging to your Ruby on Rails app

Get started with tamper-proof audit trails in minutes. Open source, from $99/mo.