我觉得这是一个非常noob的问题,但是这里有。
我有一个带有日期时间属性(日期)的模型(演出)和一个过期的布尔属性(已过期)。
当日期时间日期超过今天的日期时,我希望过期的布尔值设置为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
我觉得这应该很简单,但我找不到很多信息。
答案 0 :(得分:2)
创建一个rake任务,并在每天23:59(或任何你想要的时间)运行。
Gig.where('date < ?', Date.today).update_all(expired: true)
答案 1 :(得分:1)
了解布尔值的目的是相关的。如果您的目标是能够创建一个属性以用于整个代码中的查询(例如,获取所有过期的演出),那么范围可能是一个好方法。只需将此代码添加到您的Gig模型中:
scope :expired, -> { where('date < ?', Time.current.beginning_of_day) }
然后你可以通过写下来获得所有过期的演出:
Gig.expired
然后你根本不需要过期的布尔值。如果您使用当前的方法方法,则必须使用后台进程每天设置过期的布尔值。有关使用范围的详细信息,请参阅http://guides.rubyonrails.org/active_record_querying.html#scopes。