如何在ActiveRecord回调中跳过PaperTrail版本

时间:2016-10-14 09:50:41

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

目前,我已使用PaperTrail实施了Rails数据审核应用。 我为每个createupdatedestroy行动添加了新版本。

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

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

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

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

我想知道是否有办法这样做。

任何建议都表示赞赏。

谢谢,

2 个答案:

答案 0 :(得分:5)

我认为您可以使用without_versioning

  

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

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

答案 1 :(得分:3)

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)