【问题标题】:How To Skip PaperTrail Version on ActiveRecord Callback如何在 ActiveRecord 回调中跳过 PaperTrail 版本
【发布时间】:2016-10-14 09:50:40
【问题描述】:

目前,我已经使用 PaperTrail 实现了一个 Rails 数据审计应用程序。 我为每个 createupdatedestroy 操作添加了一个新版本。

问题是,我的模型中有一个 after_create 回调,我希望 PaperTrail 忽略它。

目前,当我创建新记录时,会创建两个版本。一个是create事件,一个是我回调的update事件。

我想要的只是在这里创建一个版本,创建事件的一个版本。

具体来说,我的回调只是在我不想向用户显示这种更改的记录中添加一个别名,即别名。

不知道有没有办法。

欢迎提出任何建议。

谢谢,

【问题讨论】:

  • 我认为你可以使用before_create
  • 感谢@AndreyDeineko 的第一时间和快速响应。但是,很抱歉,我不能在我的情况下使用 before_create,因为我使用记录的 ID 来形成别名 ID。

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


【解决方案1】:

without_versioning 在 v10 中被删除,正如提到的 here

改用:

PaperTrail.request(enabled: false) do
  # no versions created
end

或仅适用于特定型号:

PaperTrail.request.disable_model(Banana)
# changes to Banana model do not create versions,
# but eg. changes to Kiwi model do.
PaperTrail.request.enable_model(Banana)

【讨论】:

    【解决方案2】:

    我认为你可以使用without_versioning,其中

    执行给定的方法或块而不创建新版本

    user.without_versioning { |obj| obj.update_attributes(attribute: 'new_value') }
    

    【讨论】:

    • @PirunSeng 很棒,很高兴为您提供帮助!确保接受对您有用的答案(我刚刚注意到,您通常不会这样做)-在答案分数附近寻找复选标记:)
    • @PirunSeng 谢谢。另外,请查看您之前的问题 - 是否还有值得勾选的答案?这样你就可以通知社区这个特定的问题已经解决了。
    • 感谢您提醒我之前的问题。无论如何,我只想为您的答案添加另一个注释。我刚刚提出了运行 rspec 的 PaperTrail 弃用警告。 DEPRECATION WARNING: Use paper_trail.without_versioning instead of without_versioning.我已经更新了那行,它仍然可以正常工作,警告已经消失:)
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2014-05-05
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    相关资源
    最近更新 更多