2016-04-25 9 views
2

私はフィールドupdated_atを追跡しているモデルを持っています。previous updated_atにアクセスするには?

以前のupdated_atを追跡できる方法はありますか?いくつかの作業が

updated_atのと呼ばれ、その後save行われる(Aは、実際の日時スタンプがある)

updated_atの= A

例えば

= 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を使用すると便利です。 それはあなたのアプリのパフォーマンスに影響するかもしれないディスク上の前のレコードを保持します。 以前のレコードを格納するメモリ内ソリューションを実装する方が改善されました。

関連する問題