2012-08-15 48 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