更新其他参数时更新一个参数

时间:2013-07-16 06:11:27

标签: ruby-on-rails

我正在创建一个简单的任务管理器,除了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时)。

当任务标记为已完成时,如何才能调用此方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

只需再添加一个条件,检查completed_time是否已有值。如果是,请不要更新它。

def add_completed_time
  if self.completed? and self.completed_time == nil
    self.completed_time = DateTime.now
  end
end