監査証跡に paper_trail を使用しています。create、update、delete イベントに加えて、view(record)、sent(email) などのいくつかのカスタム イベントを追跡したいのですが、モデルの監査中にそのようなカスタム イベントをどのように導入できますか?
3 に答える
paper_trail マネージドVersion
sにカスタム イベントを追加する微調整を見つけました。
Version.create(item_type: "Campaign", item_id: campaign.id, event: "Sent")
これは正しい解決策ではないかもしれませんが、目標を達成するのに役立ちました。paper_trail をもっと調べて、より良い解決策を見つけたいと思います。
ペーパー トレイル フローに従い、ペーパー トレイルをタッチ イベントにフックします。
record.paper_trail_event = 'notified'
record.touch
そのフックを配置したくない場合は、次のことができます。
record.versions.create!(event: 'notified')
2 番目のアプローチの主な問題は、PaperTrail スコープのパラメーターや、そのモデルの PaperTrail 構成に対して定義したその他の動的フィールドが適用されないことです。
これらは手動で設定する必要があります。の場合は次のrequest.whodunnit
ようになります。
record.versions.create!(event: 'notified', whodunnit: current_user.id)
質問の最初の部分への回答として、レールのページ ビューの単純なヒット カウンターを参照してください。送信メールの追跡に関しては、Observer パターンを使用することをお勧めします。
いずれにせよ、これらのイベントはすべてpaper_trail
ドメイン外です。データの変更中paper_trail
にモデルのバージョンを作成するだけで、カスタム イベントを観察し、そのイベントに関するすべての必要な情報を DB に書き込む必要があります。