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
我有一个很奇怪的 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