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 ] } } 
+0

谢谢!这回答了一切! – TomDogg 2010-10-14 15:30:30

模型在服务器启动时加载,但方法在调用时被调用。如果你正在谈论1.day,那么1.day不会改变(除非他们改变了一天中的秒数),所以你不必担心只会被“加载”一次。

+0

感谢您的快速回答! 我只是指:(self.enddate - Time.now)。 因此,如果我没有弄错,只有当我们在**模型中谈论“named_scope”s **时,才必须纠正这个问题......? – TomDogg 2010-10-14 13:15:58

if (self.enddate <= Date.today) 

难道这是解决办法吗?