在我的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,但由于对象在重新排列之前和之后没有变化,因此它还原为上一个保存的唯一版本,这是不正确的。