如何在 ActiveRecord 回调中跳过 PaperTrail 版本
How To Skip PaperTrail Version on ActiveRecord Callback
目前,我已经使用 PaperTrail 实现了一个 Rails 数据审计应用程序。
我为每个 create
、update
和 destroy
操作添加了一个新版本。
问题是,我的模型中有一个 after_create
回调,我希望 PaperTrail 在其中忽略它。
目前,当我创建一条新记录时,会创建两个版本。一个是创建事件,一个是我回调的更新事件。
我想要的是这里只创建一个版本,创建事件的一个版本。
具体来说,我的回调只是在我的记录中添加一个 slug,一个别名,我不想在其中向用户显示这种更改。
不知道有没有办法做到。
如有任何建议,我们将不胜感激。
谢谢,
我想你可以利用 without_versioning
,
Executes the given method or block without creating a new version
user.without_versioning { |obj| obj.update_attributes(attribute: 'new_value') }
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)
目前,我已经使用 PaperTrail 实现了一个 Rails 数据审计应用程序。
我为每个 create
、update
和 destroy
操作添加了一个新版本。
问题是,我的模型中有一个 after_create
回调,我希望 PaperTrail 在其中忽略它。
目前,当我创建一条新记录时,会创建两个版本。一个是创建事件,一个是我回调的更新事件。
我想要的是这里只创建一个版本,创建事件的一个版本。
具体来说,我的回调只是在我的记录中添加一个 slug,一个别名,我不想在其中向用户显示这种更改。
不知道有没有办法做到。
如有任何建议,我们将不胜感激。
谢谢,
我想你可以利用 without_versioning
,
Executes the given method or block without creating a new version
user.without_versioning { |obj| obj.update_attributes(attribute: 'new_value') }
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)