我觉得这是一个非常菜鸟的问题,但在这里。
我有一个模型 (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。