Rails显示PaperTrail版本的视图

时间:2015-01-27 22:37:09

标签: ruby-on-rails versions paper-trail-gem

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

由于上述原因。我希望这些版本能够满足以下要求:

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

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

我将如何做到这一点?我需要能够创建一个指向其中一个页面的链接,这些页面会输出类似于/model/23的页面,这些页面会将您带到有关该项目特定版本的页面。

我知道这是一个奇怪的问题,但想知道是否有人会对这个奇怪的用例有任何意见,以及我有时如何将版本带到前台以像现有的东西一样行动,并且othertimes像往常一样留在后台。 / p>

1 个答案:

答案 0 :(得分:1)

基本上我们在这里做的是使用PaperTrail为您的模型添加一个名为versions的新方法的事实,该方法返回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