Rails 显示 PaperTrail 版本的视图

Rails show views for PaperTrail versions

我有一个很奇怪的 PaperTrail 用例。在我的场景中,版本基于发生的物理事件。因此,我的模型版本只会在我说的时候创建。

因为以上。我希望这些版本能够执行以下操作:

当我 运行 类似 Model.all 时,这应该会按预期忽略版本,但在某些情况下我希望版本能够正常返回,因此我需要能够执行类似 Model.withVersions 返回所有当前记录和所有相关版本。这可能吗?

此外,我需要能够为版本构建页面。即:Rails 显示操作和视图。

我将如何做到这一点?我需要能够制作一个 link 到其中一个页面,该页面将输出类似于 /model/23 的内容,这会将您带到有关该项目特定版本的页面。

我知道这是一个奇怪的问题,但想知道是否有人对这个奇怪的用例有任何意见,以及我如何有时将版本带到前台以像现有的东西一样工作,有时又像平常一样留在后台.

基本上我们在这里做的是利用 PaperTrail 向您的模型添加一个名为 versions 的新方法,其中 returns 一个 PaperTrail::Version 对象数组,每个对象一个模型的版本。在任何这些版本对象上,您都可以调用 .reify 以获取该版本的模型。

现在,我不确定您希望如何返回这些版本,假设我们为每个模型创建一个版本数组,并将它们存储在由每个模型的主键键入的散列中:

hash = {}
Model.all.each { |m| hash[m.id] = m.versions.map(&:reify) }

# so to see the array of all versions of model with id=1
hash[1]

重新显示页面,您需要将版本作为参数传递,例如。 /model/23?version=5 然后在您的 show 操作中,您将执行如下操作:

@model = Model.find(params[:id])
if params[:version]
  @model = @model.versions[params[:version]-1].reify
end