2016-04-25 36 views
2

我有跟蹤該領域updated_at的模型。如何訪問之前的updated_at?

有沒有辦法跟蹤以前的updated_at

例如

的updated_at = A(其中A是一個實際的日期時間戳)

一些工作完成然後save稱爲

的updated_at = B(其中B是一個實際的日期時間戳)

有沒有一種方法可以訪問以前的updated_at即A?

回答

4

請看看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

6

如果有可用的對象,那麼你可以撥打:

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

3

如果您使用paper trail gem將很有用。 它會堅持以前的記錄在磁盤上,這可能會影響您的應用程序性能。 更好的實現內存解決方案的方式來存儲以前的記錄。

相關問題