我有一个用纸质跟踪跟踪的模型。我需要将当前值与创建的模型值进行比较。到目前为止,我可以轻松获得当前价值。如何获得原版?
获取当前值:widget.name
获取原始文件:widget.versions.first.???.name
我知道widget.versions.first.changeset
会返回这样的哈希:
{
name: [nil, 'original name']
}
但我不想解析它,必须有更好的方法
答案 0 :(得分:0)
我不打算这样做:
original = widget.versions.where(event: 'create')[0].changeset['name'][1]
难看,但是效果很好。猴子可以将其修补到paper_trail
中进行清理
答案 1 :(得分:0)
reify
上使用version
或返回widget
(如果不存在)。在Github存储库上有一个closed issue关于reify
返回nil
。它在那里被忽略了,但是我认为这是一个非常有效的问题,并且是一个常见的用例。
做widget.versions.first.reify
会返回nil
,所以我能找到的最好方法是:
widget.versions.second.reify
但是当对象没有任何更改时,这将不起作用。因此,您需要在那里进行nil
检入:
widget.versions.second&.reify || widget
这将查找第二个版本,如果存在第二个版本,则将调用reify
,它将返回原始对象。如果不存在,它将仅返回widget
本身。
如果您想清除它,可以将其作为方法添加到类中:
# Returns the original version of this object or just this object if there has been no changes.
def original_version
self.versions.second&.reify || self
end
我在PaperTrail上有一个开放的Issue / Feature请求,可以将original_version
添加到核心库本身:
https://github.com/paper-trail-gem/paper_trail/issues/1204
如果要在其中投票,请给它投票。