我知道以下型号代码不正确:因为模型只在服务器启动时加载,所以时间“常量”也只在那时加载。
class Article < ActiveRecord::Base
def expiring?
if (self.enddate - Time.now) <= 1.day
true
else
false
end
end
end
我有什么方法可以纠正方法,以便每次“到期时”评估时间值?被称为?
感谢您的帮助!
汤姆
答案 0 :(得分:2)
在服务器启动时加载模型,但在调用它们时会调用方法。如果你在谈论1.day
,那么1.day
永远不会改变(除非他们改变了一天中的秒数)所以你不必担心这只是'加载'一次。
答案 1 :(得分:1)
除非我遗漏了某些内容,否则我发现您所提供的代码没有任何问题。 Time.now会在每次到期时得到评估吗?叫做。我可能会缩短为:
def expiring?
self.enddate >= 1.day.from_now
end
对于命名范围,您需要将其放入lambda中,以便每次都进行评估(这听起来就像您实际要问的那样):
named_scope :expiring, lambda { {:conditions => ["enddate >= ?", 1.day.from_now ] } }
答案 2 :(得分:0)
if (self.enddate <= Date.today)
这可能是解决方案吗?