2016-05-11 9 views
1

私はデフォルトはfalseであるブールatrributeを持っているに変化させた場合の日付を取得する方法。属性がtrueに変更された日付はどのように取得できますか?値が変更された場合 is_changedはあなたを与えます。属性が最初に変更された日付が必要です。 私はどのようにそれを軌道に入れますか?特定の属性は、最初のレール

+0

https://github.com/laserlemon/vestal_versions – illusionist

答えて

1

ブール属性のすべての最初の変更のタイムスタンプを保存します、そのテーブルの属性「FIRST_CHANGEが」trueまたはfalseに変更し、モデルにすることができます。この後、この

before_update :check_changes 

def check_changes 
    if self.<boolean_attribute>.is_changed? and first_change.nil? 
    self.update(first_change: Time.now) 
    end 
end 

のようにコールバックを書き加えますboolean属性が変更されたときにチェックします。

0

あなたは明確なモデルであなたのブール属性をラップすることができますし、特定のフィールドが最初にsettedまたは更新されたとき、そこから簡単にトレースすることができます。あなたの現在のモデルでは、あなたは、特定の属性の状態を変更するだけで、オブジェクト全体をトレースすることはできませんが、それはあなたが私が推測する必要があるものではありません。

0

基本的にはgitの機能がActiveRecordレコードにあるように見えます。

  • changed_dateのように別々のコルを使用する2つの方法があります。 fieldが初めて変更されたときに更新してください。あなたの要件はそれほど単純であれば
    • は、私はこれをお勧めします。重い宝石は使用しないでください。 VestalVersionまたはPaperTrail
      • これらのよう
    • 使用ライブラリは、あなたのレコードにすべての活動を追跡すると便利です。
    • あなたはすべての変更を追跡することができ、どのようなそのに変更し、とき
    • もあなたはそれが
0

を変えた時の任意の時点に、あなたの記録を元に戻すことができます私のような2つの方法があると思いますフィールドが初めてか

を変更したとき答えは別のフィールドを作成し、そこに日付を追加することが提案の上、あなたはのparamsですべてのモデルの活動を記録しますPublic Activity gemを使用することができます。 このテーブルに基づいてアクティビティテーブルが作成されます。フィールドの日付は最初に変更されたが長時間のプロセスの日付を取得できます

関連する問題