8

監査証跡に paper_trail を使用しています。create、update、delete イベントに加えて、view(record)、sent(email) などのいくつかのカスタム イベントを追跡したいのですが、モデルの監査中にそのようなカスタム イベントをどのように導入できますか?

4

3 に答える 3

4

paper_trail マネージドVersionsにカスタム イベントを追加する微調整を見つけました。

Version.create(item_type: "Campaign", item_id: campaign.id, event: "Sent")

これは正しい解決策ではないかもしれませんが、目標を達成するのに役立ちました。paper_trail をもっと調べて、より良い解決策を見つけたいと思います。

于 2012-03-26T05:33:46.903 に答える
2

ペーパー トレイル フローに従い、ペーパー トレイルをタッチ イベントにフックします。

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)
于 2020-11-28T14:33:07.243 に答える
1

質問の最初の部分への回答として、レールのページ ビューの単純なヒット カウンターを参照してください。送信メールの追跡に関しては、Observer パターンを使用することをお勧めします。

いずれにせよ、これらのイベントはすべてpaper_trailドメイン外です。データの変更中paper_trailにモデルのバージョンを作成するだけで、カスタム イベントを観察し、そのイベントに関するすべての必要な情報を DB に書き込む必要があります。

于 2012-03-24T14:03:36.927 に答える