0

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

我有一个带有日期时间属性(日期)和过期布尔属性(过期)的模型(演出)。

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

在 Gig 模型中:

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

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

4

2 回答 2

2

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

Gig.where('date < ?', Date.today).update_all(expired: true)
于 2016-02-03T20:35:21.603 回答
1

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

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

然后,您可以通过以下方式获取所有过期的演出:

Gig.expired

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

于 2016-02-03T20:43:11.833 回答