Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何获取具有纸质痕迹的模型的原始属性_Ruby On Rails_Paper Trail Gem - Fatal编程技术网

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
。但是如果你不仅仅是为了名字,我想这将比解析更乏味。