PaperTrail和批量版本

时间:2013-04-18 04:56:24

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

在我的Rails应用程序中,我有一系列可以在页面上重新排序的对象(每个对象保存其相对于页面上其他对象的位置)。我想对这些对象的排列方式进行一些版本控制,以便我可以实现撤消/重做按钮。

我认为PaperTrail gem可能是保存这些对象排序方式的树结构的好选择,但问题是当用户重新排列对象时,某些对象的位置可能会改变而其他人没有,PaperTrail似乎只在对象被更改时保存版本。我真正喜欢的是能够保存模型中所有对象状态的快照的东西。有没有办法强制PaperTrail保存一个版本,以便我可以调用像

这样的东西
@objects.each do |object|
    @object = object.versions.scoped.last
    @version = Version.find(@object)
    @version.reify.save!
end

撤消更改?或者有更好的方法来实现这个目标吗?

例如(我正在排序2D数组):

在进行更改之前:

name   | position | ancestry
Step 0 |    0     |   0
Step 1 |    1     |  371
Step 2 |    2     |  371

进行更改后:

name   | position | ancestry
Step 0 |    0     |   0
Step 1 |    1     |  371
Step 2 |    2     |  371/374

尝试撤消后:

name   | position | ancestry
Step 0 |    0     |   0
Step 1 |    2     |  371
Step 2 |    2     |  371

注意步骤1的位置应该是1,但由于对象在重新排列之前和之后没有变化,因此它还原为上一个保存的唯一版本,这是不正确的。

0 个答案:

没有答案