1

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

因为以上。我希望这些版本能够做到以下几点:

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

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

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

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

4

1 回答 1

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
于 2015-01-28T00:03:55.570 回答