使用 Paper Trail 将主要对象恢复到特定版本

restore main Object to a Specific Version by using Paper Trail

如何将特定版本中的更改应用到主要对象?

例如:

假设有一个项目模型。每当更新项目记录时,系统都会创建一个版本。现在我有一个要求,用户可以将此项目记录移动到任何特定版本,并且 ONLY update 在该版本期间更改的所有属性。

 Project 1 has following Versions:
  V5 
  V4
  V3
  V2
  V1

 if user wants he can move Project to any of these 5 Versions and apply the changes 
 made in that version in project record.

我正在使用

ruby 2.5.3,Rails 5.1.6.2 & paper_trail (10.3.0)

文档说每个版本也有一个 created_at 属性。所以你可以找到给定时间的版本:

widget = widget.paper_trail.version_at(1.day.ago)  # the widget as it was one day ago
widget.save                                        # reverted

如果您知道用户想要什么版本,您也知道 created_at 这样您就可以将其设置为正确的版本。

wanted_version = # Find the correct version that the user wants
widget = widget.paper_trail.version_at(wanted_version.created_at)
widget.save