【发布时间】:2016-06-23 04:58:41
【问题描述】:
如果用户追溯创建了他已经accomplished 的挑战,那么before_save 如何检查days_left_challenged == 0?
挑战.rb
before_save :days_left_challenged_sets_deadline
def days_left_challenged_sets_deadline
if self.days_left_challenged == 0
self.accomplished = true
end
end
def days_left_challenged
self.days_challenged - ((date_started.to_date)..Date.yesterday).count do |date|
committed_wdays.include? date.wday
end + self.missed_days
end
现在使用此代码accomplished 仍然是nil,即使用户创建了具有days_left_challenged == 0 的挑战。
【问题讨论】:
-
你确定在你测试
days_left_unchallenged返回零的情况下?此外,您确定该功能正在运行并且您的记录实际上已保存? -
所以它进入了
if self.days_left_challenged == 0,将accomplished设置为true,但它仍然在数据库中以null结束? -
您希望
date_started.to_date是什么?过去还是未来? -
出于调试目的,将
days_left_challenged_sets_deadline中的if 语句更改为self.accomplished = days_left_challenged == 0 ? true : false,看看是否导致accomplished被设置为false,或者它是否仍然是nil。 -
酷。而 btdubs,
NULL是 Ruby 的nil的 SQL 等价物。我只是假设您使用的是关系数据库,而我的赌注是 sqlite 或 postgresql。
标签: ruby-on-rails ruby methods model callback