Rails模型:如何正确处理时间常数?

时间:2010-10-14 12:49:29

标签: ruby-on-rails time model lambda

我知道以下型号代码不正确:因为模型只在服务器启动时加载,所以时间“常量”也只在那时加载。

class Article < ActiveRecord::Base

  def expiring?
    if (self.enddate - Time.now) <= 1.day
      true
    else
      false
    end
  end

end

我有什么方法可以纠正方法,以便每次“到期时”评估时间值?被称为

感谢您的帮助!

汤姆

3 个答案:

答案 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)

这可能是解决方案吗?