管理画面から変更されたrecordのみ誰が作成/更新/削除したかauditedで記録する


collectiveidea/auditedとは

誰が・いつ・どのような変更をDBに行ったかを取ることを言います。その作成/変更を取るためのgemです。


auditedの問題点

設定の仕方としては、下記のように保存したいmodelにauditedと記述します。


user.rb

class User < ApplicationRecord

audited
end

しかし、ユーザーが変更が多い場合、auditsのlog tableはレコード数は増える一方また、INSERTするのに時間がかかり、ユーザー体験の低下が発生します。

今回私達がやりたい問題としては、管理されたユーザーの変更のみ、データを取得したいので、下記のように設定しました。


app/modeles/application_record.rb

audited if: ->(_model) { ::Audited.store[:current_controller].is_a?(AdminController) }


もしくは管理画面が、Engine化されている場合


AdminEngine/config/initializers/audited.rb

ApplicationRecord.class_eval do

audited if: ->(_model) { ::Audited.store[:current_controller].is_a?(AdminEngine::ApplicationController) }
end