2012-08-15 49 views
0

我得到了日期時間filds order_confirmed_atcompletion_confirmed_at尋找的寶石,標誌日期時間字段

class CoolModel < ActiveRecord::Base 
    attr_accessible :order_confirmed, completion_confirmed 

    def order_confirmed 
    order_confirmed_at.present? 
    end 

    def order_confirmed=(state) 
    if state and order_confirmed_at.blank? 
     self.order_confirmed_at = Time.now 
    end 
    order_confirmed_at.present? 
    end 

    def completion_confirmed 
    completion_confirmed_at.present? 
    end 

    def completion_confirmed=(state) 
    if state and completion_confirmed_at.blank? 
     self.completion_confirmed_at = Time.now 
    end 
    completion_confirmed_at.present? 
    end 
end 

...所以在我看來,我可以檢查複選框,依次進行確認和完成

事情是:不僅這是重複,但這東西顯然看起來很標準。所以在節省時間寫寶石:是否有軌道寶石/引擎這樣做(或者可能是我不知道的Rails的一部分)??

class CoolModel < ActiveRecord::Base 
    #something like this 
    acts_even_coller_on :order_confirmed_at, :completion_confirmed_at 
end 

回答

0

你可以重寫setter方法。

def confirmed_at=(value) 
    super value == "true" ? confirmed_at || Time.now : nil 
end 
+0

讓我們說訂單已確認5.天前,現在用戶更新表單,他還會更新他的時間,當他「確認」訂單。換句話說,這將作爲updated_at屬性,而不是時間跟蹤標誌。 – equivalent8 2012-08-15 14:14:34

+1

如果您不想覆蓋該值,您可以檢查該值是否已經設定值? order_confirmed || Time.zone.now:無 – delwynd 2012-08-15 14:21:29

+0

...對於錯字抱歉:「也更新他的時間」應該是「也更新order_confirmed_at時間」 – equivalent8 2012-08-15 14:22:34