如何在paper_trail中跟踪自定义事件?

时间:2012-03-24 12:34:56

标签: ruby ruby-on-rails-3 paper-trail-gem

我正在使用paper_trail进行审计跟踪。除了创建,更新和删除事件,我想跟踪一些自定义事件,如视图(记录),发送(电子邮件)等。我们如何在审核模型时引入此类自定义事件?

3 个答案:

答案 0 :(得分:5)

我发现了一个在paper_trail托管版本中添加自定义事件的调整。这是调整

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

可能这不是正确的解决方案,但它帮助我实现了目标。我会更多地探索paper_trail以找到明显的解决方案。

请继续发布您的建议。

谢谢, 阿米特帕特尔

答案 1 :(得分:1)

请参阅simple hit counter for page views in rails作为问题第一部分的答案。至于跟踪已发送的邮件,您可能需要使用Observer pattern

在任何情况下,所有这些事件都在paper_trail域之外。虽然paper_trail只是在数据更改期间创建模型的版本,但您需要观察自定义事件并向DB写入有关该事件的所有必要信息。

答案 2 :(得分:0)

遵循纸张跟踪流程,并将纸张跟踪挂钩到触摸事件:

record.paper_trail_event = 'notified'
record.touch

如果您不想将该钩子固定到位,则可以:

record.versions.create!(event: 'notified')

第二种方法的主要问题是,它不会应用任何PaperTrail范围的参数,也不会应用您可能为该模型PaperTrail配置定义的任何其他动态字段。

您将需要手动设置这些设置。对于request.whodunnit,它将是:

record.versions.create!(event: 'notified', whodunnit: current_user.id)