【问题标题】:Rails models: How to treat time constants correctly?Rails 模型:如何正确处理时间常数?
【发布时间】:2011-04-25 09:32:12
【问题描述】:

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

class Article < ActiveRecord::Base

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

end

我必须如何更正,以便每次“过期”时评估时间值?叫

感谢您的帮助!

汤姆

【问题讨论】:

    标签: ruby-on-rails time model lambda


    【解决方案1】:

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

    【讨论】:

    • 感谢您的快速回答!我只是指:(self.enddate - Time.now)。所以,如果我没记错的话,只有在我们谈论“named_scope”的 in 模型时才必须纠正这个问题......?
    【解决方案2】:
    if (self.enddate <= Date.today)
    

    这就是解决方案吗?

    【讨论】:

      【解决方案3】:

      除非我遗漏了什么,否则我认为您提供的代码没有任何问题。 Time.now 每次到期都会被评估?叫做。我可能会缩短为:

      def expiring?
        self.enddate >= 1.day.from_now
      end
      

      对于命名范围,您需要将其放入 lambda 中,以便每次都会对其进行评估(这听起来像是您实际提出的问题):

      named_scope :expiring, lambda { {:conditions => ["enddate >= ?", 1.day.from_now ] } } 
      

      【讨论】:

      • 谢谢!这回答了一切!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 2013-11-19
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2016-03-19
      相关资源
      最近更新 更多