如何在修改版本时暂时禁用PaperTrail?

时间:2016-09-21 11:46:57

标签: ruby undo-redo paper-trail-gem

我在我的网站中使用paper_trail进行撤消/重做功能,当我在reify.save和{versionsave上调用PaperTrail::Version时出现问题{1}}被创建。

有没有办法在保存具体物体时关闭PaperTrail?

我知道PaperTrail.enabled = false是可能的,但我不希望在同一时间进行其他更改以便不进行录制。

我理想的解决方案将是:

PaperTrail.disable { version.reify.save }

4 个答案:

答案 0 :(得分:2)

我曾经通过混合这样的东西来完成类似的事情:

def without_papertrail
  PaperTrail.disable
  yield if block_given?
  PaperTrail.enable
end

然后你可以做一些与你的目标类似的事情

without_papertrail { version.reify.save }

答案 1 :(得分:1)

您可以使用以下两种语法之一禁用特定型号的纸质跟踪:

m = MyModel.find(123)
m.paper_trail.without_versioning do
  # No versioning of `m` happens in this block
end

注意:由于在模型实例上调用它,似乎这可能会自然地禁用该实例上的版本控制,但是这种语法会禁用整个模型的版本控制。

另一种语法:

MyModel.paper_trail.disable
# No versioning of MyModel happens here
MyModel.paper_trail.enable

答案 2 :(得分:0)

自述文件:https://github.com/paper-trail-gem/paper_trail#7-testing

PaperTrail.enabled = false

答案 3 :(得分:0)

截至gem documentation,到目前为止,gem版本 10.3.0 的正确实现方法是:

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)