paper_trail_advanced_usage
🕵️ Advanced Model Versioning with PaperTrail
Use the PaperTrail gem to capture every change to your ActiveRecord models, enrich version metadata, and perform time-travel queries. This is ideal for audit logs, rollback features, or data comparisons across releases.
# Gemfile
gem 'paper_trail', '~> 12.0'
# app/models/user.rb
class User < ApplicationRecord
has_paper_trail on: [:create, :update, :destroy],
ignore: [:last_sign_in_at],
meta: { changed_by: :current_user_id }
private
def current_user_id
PaperTrail.request.whodunnit
end
end
# config/initializers/paper_trail.rb
PaperTrail.configure do |config|
config.track_associations = true
end
Retrieve and restore past states:
user = User.find(42)
# List all versions
user.versions.each do |version|
puts "Version #{version.index} at #{version.created_at}: event=#{version.event}, by=#{version.whodunnit}"
end
# Time-travel reification
past_user = user.versions.as_of(1.day.ago).reify
puts past_user.attributes
This setup gives you full auditability, custom metadata for tracing actors, and on‑the‑fly rollbacks or diffs between any two points in time.