Ruby on rails 如何获取具有纸质痕迹的模型的原始属性
我有一个模型,上面有书面记录。我需要将当前值与模型创建的值进行比较。到目前为止,我可以很容易地得到当前值。我怎样才能拿到原件 要获取当前值:Ruby on rails 如何获取具有纸质痕迹的模型的原始属性,ruby-on-rails,paper-trail-gem,Ruby On Rails,Paper Trail Gem,我有一个模型,上面有书面记录。我需要将当前值与模型创建的值进行比较。到目前为止,我可以很容易地得到当前值。我怎样才能拿到原件 要获取当前值:widget.name 获取原始:widget.versions.first.??.name 我知道widget.versions.first.changeset将返回如下哈希值: { name: [nil, 'original name'] } 但我不想把它解析出来,必须有更好的方法我不想这样做: original=widget.versions.w
widget.name
获取原始:widget.versions.first.??.name
我知道widget.versions.first.changeset
将返回如下哈希值:
{
name: [nil, 'original name']
}
但我不想把它解析出来,必须有更好的方法我不想这样做:
original=widget.versions.where(事件:“创建”)[0]。变更集['name'][1]
很难看,但效果很好。猴子可以将其修补到纸迹
中清理它在第二个版本上使用具体化
,或者返回小部件
(如果不存在)。
在Github回购协议上有一个关于reify
的返回nil
。它在那里被忽略了,但我认为这是一个非常有效的问题,也是一个常见的用例
执行widget.versions.first.reify
返回nil
,因此我能找到的最好方法是:
widget.versions.second.reify
但是,当对象没有任何更改时,这不起作用。因此,您需要一个nil
签入:
widget.versions.second&.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
我有一个公开发行/功能要求,需要向核心库本身添加原始版本
:
如果你想把它放在那里,就给它投一票。如果没有具体化,你就有点被卡住了。但是,如果您只查找原始名称,则可以使用元数据在语法上实现您想要的功能,请参阅。。。基本上创建一个原始\u名称
元数据属性并存储在create上。然后,您将在version对象上使用它作为一级函数:widget.versions.first.original\u name
。但是如果你不仅仅是为了名字,我想这将比解析更乏味。