铁轨上的红宝石.日期过后更新属性



我觉得这是一个非常菜鸟的问题,但在这里。

我有一个模型 (gig),其中包含日期时间属性(日期)和过期的布尔属性(过期)。

我希望过期的布尔值在日期时间日期超过今天的日期时设置为 true。

在零工模型中:

def expired
  if self.date.to_date > Date.today
    self.update(:expired, true)
  end
end

不行。也没有:

def expired
  if self('date < ?', Date.today)
    self.update_attribute(:expired, true)
  end
end

我觉得这应该很简单,但我找不到太多关于这方面的信息。

创建一个耙子任务,并在每天 23:59(或您想要的任何时间)运行。

Gig.where('date < ?', Date.today).update_all(expired: true)

了解布尔值的用途是相关的。如果您的目标是能够创建一个属性以在整个代码中用于 where 查询(例如,获取所有过期的演出),那么范围可能是一个不错的方法。只需将此代码添加到您的 Gig 模型中:

scope :expired, -> { where('date < ?', Time.current.beginning_of_day) }

然后,您可以通过编写以下内容来获取所有过期的演出:

Gig.expired

那么你根本不需要过期的布尔值。如果使用当前的方法方法,则必须每天使用后台进程来设置过期的布尔值。有关使用作用域的详细信息,请参阅 http://guides.rubyonrails.org/active_record_querying.html#scopes。

相关内容

  • 没有找到相关文章

最新更新