1

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

我认为PaperTrail gem 可能是保存这些对象如何排序的树结构的好选择,但问题是当用户重新排列对象时,某些对象的位置可能会改变,而其他对象的位置可能不会改变,而 PaperTrail 仅似乎在对象已更改时保存版本。我真正想要的是可以保存模型中所有对象状态快照的东西。有什么办法可以强制 PaperTrail 保存一个版本,这样我就可以调用类似的东西

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

撤消更改?还是有更好的方法来实现这一点?

例如(我正在对二维数组进行排序):

在进行更改之前:

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,但是由于对象在重新排列之前和之后没有改变,它恢复到最后保存的唯一版本,这是不正确的。

4

0 回答 0