Ruby 在 rails。日期过后更新属性
Ruby on rails. Update attribute when date passes
我觉得这是一个非常菜鸟的问题,但这里是。
我有一个带有日期时间属性(日期)和过期布尔属性(已过期)的模型 (gig)。
我希望在日期时间日期超过今天的日期时将过期布尔值设置为 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
我觉得这应该很简单,但我找不到太多这方面的信息。
每天在 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。
我觉得这是一个非常菜鸟的问题,但这里是。
我有一个带有日期时间属性(日期)和过期布尔属性(已过期)的模型 (gig)。
我希望在日期时间日期超过今天的日期时将过期布尔值设置为 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
我觉得这应该很简单,但我找不到太多这方面的信息。
每天在 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。