Rails模型:如何正确处理时间常量?
问题描述:
我知道下面的模型代码是不正确的:由于模型只在服务器启动时加载,所以时间“常量”也只在当时加载。Rails模型:如何正确处理时间常量?
class Article < ActiveRecord::Base
def expiring?
if (self.enddate - Time.now) <= 1.day
true
else
false
end
end
end
我有什么纠正如何,这样的时间价值得到评估每次“过期?”叫做?
感谢您的帮助!
Tom
答
除非我错过了一些东西,我没有看到你给出的代码有什么问题。 Time.now会在每次到期时进行评估?叫做。我可能会缩短:
def expiring?
self.enddate >= 1.day.from_now
end
对于命名范围你需要把它变成一个lambda所以它得到的评价每次(这听起来像你实际上问的问题):
named_scope :expiring, lambda { {:conditions => ["enddate >= ?", 1.day.from_now ] } }
答
模型在服务器启动时加载,但方法在调用时被调用。如果你正在谈论1.day
,那么1.day
不会改变(除非他们改变了一天中的秒数),所以你不必担心只会被“加载”一次。
+0
感谢您的快速回答! 我只是指:(self.enddate - Time.now)。 因此,如果我没有弄错,只有当我们在**模型中谈论“named_scope”s **时,才必须纠正这个问题......? – TomDogg 2010-10-14 13:15:58
答
if (self.enddate <= Date.today)
难道这是解决办法吗?
谢谢!这回答了一切! – TomDogg 2010-10-14 15:30:30