如何将时间戳重置为" nil"在一天结束?

时间:2015-07-24 17:04:24

标签: ruby-on-rails ruby null timestamp

在每天结束时,我打算让此代码将时间戳completed_at重置回nil,但它无效。

def completed=(boolean)
  self.completed_at = boolean ? Time.current : nil
end

def completed
  completed_at && completed_at >= Time.current.beginning_of_day
end

重点是什么?

用户在视图中检查他是否养成了自己的习惯:

<%= link_to ''.html_safe, mark_completed_path(habit), remote: true, method: 'put', class: 'update_habit' %>

然后习惯fadeOut,但想法是习惯应该在第二天返回,这样每天用户必须再次检查这个习惯。

def home
  @habits = current_user.habits.committed_for_today.incomplete.order(:order)
end

2 个答案:

答案 0 :(得分:1)

您不需要在一天结束时将时间设置为nil,您需要将范围更改为不完整,以便在completed_at不是当前日期时将所有习惯视为不完整

如果你想要所有习惯,其中completed_at小于当前日期。这样做

 scope: incompleted, -> {where("completed_at is null OR completed_at < ?", Date.current)}

这样你就不需要任何rake任务,你的逻辑将被用来考虑每天不完整的习惯。

答案 1 :(得分:-1)

优先问题,请尝试:

   def completed=(boolean)
      self.completed_at = (boolean ? Time.current : nil)
   end