【问题标题】:More Ruby-esque way to code this?更多 Ruby 风格的编码方式?
【发布时间】:2026-02-22 12:10:02
【问题描述】:
我有一个我调用的方法过期了?这只是为了检查我的对象更新后是否超过 24 小时,如果是,则返回 true。这是我的方法,但是虽然有效,但感觉很脏,有人能想出更好的方法来实现我的目标吗?
DAY_IN_SECS = 86400
def expired?
return true unless (Time.now <=> self.updated_at + DAY_IN_SECS) == -1
end
【问题讨论】:
标签:
ruby-on-rails
ruby
refactoring
metaprogramming
【解决方案1】:
您可以使用active_support 功能,所以:
def expired?
self.updated_at > 1.day.ago
end
【解决方案2】:
即使在普通的 Ruby 中,你仍然可以做更简单的事情:
def expired?
Time.now > self.updated_at + DAY_IN_SECS
end
【解决方案3】:
您正在使用 Rails,因此您可以使用 Rails 日期/时间方法:)。
对于你的问题,我喜欢这个:
def expired?
updated_at.advance(:days => 1).past?
end