如何访问之前的updated_at?

问题描述:

我有跟踪该领域updated_at的模型。如何访问之前的updated_at?

有没有办法跟踪以前的updated_at

例如

的updated_at = A(其中A是一个实际的日期时间戳)

一些工作完成然后save称为

的updated_at = B(其中B是一个实际的日期时间戳)

有没有一种方法可以访问以前的updated_at即A?

请看看ActiveModel::Dirty模块:

object.updated_at   # returns current value 
object.updated_at_changed? # returns true or false if value has changed 
object.updated_at_was  # return last value 
object.updated_at_change  

或者

如果你想跟踪所有更改的值,你可以使用Paper Trail宝石。

+0

我认为这些方法只适用于更改实例对象的值。当您保存时,这些更改将被重置。该问题询问如何在保存发生后访问先前的值,所以我不确定这会回答问题。 – hypern

如果有可用的对象,那么你可以拨打:

object.previous_changes 

这将返回你的哈希如下显示哪些属性已经改变:

{"name"=>["foo", "bar"], "updated_at"=>[Tue, 19 Apr 2016 08:19:40 UTC +00:00, Mon, 25 Apr 2016 10:49:47 UTC +00:00]} 

参见: previous_changes

+0

我可以在对象的属性上做到这一点吗? – RPV

+0

您可以为对象的所有属性执行此操作。 previous_changes返回在上次保存/更新 –

+0

@RPV时发生变化的所有属性由于'previous_changes'返回一个散列,因此可以这样做:'object.previous_changes [:updated_at]' - 这只会返回' updated_at'属性。 – dp7

如果您使用paper trail gem将很有用。 它会坚持以前的记录在磁盘上,这可能会影响您的应用程序性能。 更好的实现内存解决方案的方式来存储以前的记录。