我试图在我的应用中捕获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属性,当我真的希望它增加存储的现有数字。我怎样才能做到这一点?
答案 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过滤器中。