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