【问题标题】: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
        

        【讨论】: