我对PaperTrail有一个奇怪的用法。在我的场景中,版本基于发生的物理事件。因此,我的模型版本仅在我说的时候创建。
由于上述原因。我希望这些版本能够满足以下要求:
当我运行像Model.all
之类的东西时,这应该按预期忽略版本但在某些情况下我希望版本能够正常返回,所以我需要能够执行Model.withVersions
之类的返回所有当前记录和所有相关版本。这可能吗?
另外,我需要能够为版本构建页面。即:Rails显示动作和视图。
我将如何做到这一点?我需要能够创建一个指向其中一个页面的链接,这些页面会输出类似于/model/23
的页面,这些页面会将您带到有关该项目特定版本的页面。
我知道这是一个奇怪的问题,但想知道是否有人会对这个奇怪的用例有任何意见,以及我有时如何将版本带到前台以像现有的东西一样行动,并且othertimes像往常一样留在后台。 / p>
答案 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