更多Ruby-esque方式来编码这个?

时间:2010-11-02 15:28:44

标签: ruby-on-rails ruby refactoring metaprogramming

我有一个方法,我打电话过期了吗?这只是为了检查自我的对象更新后是否超过24小时,如果是这样,则返回true。这是我的方法,但虽然它有效但感觉很脏,有人能想出更好的方法来实现我的目标吗?

DAY_IN_SECS = 86400

def expired?
  return true unless (Time.now <=> self.updated_at + DAY_IN_SECS) == -1
end

3 个答案:

答案 0 :(得分:12)

您可以使用active_support功能,因此:

def expired?
  self.updated_at > 1.day.ago
end

答案 1 :(得分:5)

即使在普通的Ruby中,你仍然可以做得更简单:

def expired?
  Time.now > self.updated_at + DAY_IN_SECS
end

答案 2 :(得分:3)

您正在使用Rails,因此您可以使用Rails日期/时间方法:)。

对于你的问题,我喜欢这个:

def expired?
  updated_at.advance(:days => 1).past?
end