我正在创建一个简单的任务管理器,除了completed:boolean
列之外,我还有一个completed_time:datetime
列,当用户将任务标记为已完成时,我需要存储时间。
有一个hidden_field
的解决方案,当用户检查任务完成时,由JS填充当前时间,但我认为这不是一个好主意,必须在控制器或模型级别完成
所以,现在我的Task
模型中有这个:
before_update :add_completed_time
.
.
.
def add_completed_time
if self.completed?
self.completed_time = DateTime.now
end
end
但每次更新completed_time
列时,任务在完成后更新(例如,当我将其标记为archived
时)。
当任务标记为已完成时,如何才能调用此方法?
谢谢!
答案 0 :(得分:0)
只需再添加一个条件,检查completed_time
是否已有值。如果是,请不要更新它。
def add_completed_time
if self.completed? and self.completed_time == nil
self.completed_time = DateTime.now
end
end