数据类型整数。继续递增而不是重新启动。 -Rails

时间:2017-04-22 01:20:30

标签: ruby-on-rails ruby

我试图在我的应用中捕获total_time_paused。我这样做是通过两个日期时间并在total_time_paused中存储它们之间的秒数来实现的。现在它每次都重新启动数据。我实际上希望它增加不重启。这是我的代码。

def total_paused_time
  (timekeeper.paused_at - timekeeper.unpaused_at).abs.round
end

所以在这里我采用paused_at datetime和unpaused_at datetime我得到它们之间的秒数。然后我花时间将其作为整数属性调用total_time_paused传递给它。这可以工作,但每次我暂停和取消它会重置total_time_paused属性,当我真的希望它增加存储的现有数字。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

你必须发布更多关于你的总时间逻辑,但这是我看到的问题。

每次计算总暂停时间:

def total_paused_time
  (timekeeper.paused_at - timekeeper.unpaused_at).abs.round
end

您正在覆盖之前的值。

您应该有一个存储整个暂停时间的列。您要做的是将未设置的总秒数添加到该列。

def total_paused_time
  total_seconds = (timekeeper.paused_at - timekeeper.unpaused_at).abs.round
  # add the new paused seconds to the previous
  self.total_paused_time += total_seconds
end

您也可以使用rails方式:

def total_paused_time
  total_seconds = (timekeeper.paused_at - timekeeper.unpaused_at).abs.round
  # add the new paused seconds to the previous
  self.increment!(:total_paused_time, by= total_seconds)
end

使用“增量”的优势!而不是“+ =”就是“增量!”添加并保存记录。 “+ =”仅增加数字但不保存。你必须调用.save将它放在before_save过滤器中。