0

假设我们有一个表 Product

+---+------+--------+--------------+
| id|  name| status | expiry_date  |
+---+------+--------+--------------+
| 1 |   A  | Good   | 10 min ago   | <-- this supposed to be "Expired"
| 2 |   B  | Good   | 10 min later | 
+---+------+--------+--------------+

我的问题是如何将 id 1 的状态设置为“已过期”,因为它的过期日期已过。

我通常用 cron 任务来做这个。但是,我认为读取整个表以查找几行效率不高,此外,cron 任务在其间隔到来之前不会更新状态。(即 10 分钟、20 分钟 .. 等)

有什么方法可以在达到时间时触发即时流程,以便我可以尽快更新其状态?

希望我的问题很清楚。

4

1 回答 1

0

如果您暗示要执行更新的控制器操作,您可以执行以下操作:

Product.where(["expire_date < ?", ->{ Time.now.utc - 10.minutes }.call]).update_all(:status, 'Bad')

更新。或者,如果您只想更新具有给定 ID 的单个产品:

product = Product.find(params[:id])

if product.expire_date < Time.now.utc - 10.minutes
  product.status = 'Bad'
  product.save
end
于 2012-05-15T14:58:50.313 回答