在每天结束时,我打算让此代码将时间戳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
答案 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