0

我有一个包含两个字段的循环模型:持续时间(字符串)和完成(布尔值)。当用户创建一个周期时,他们输入持续时间(比如说 30 分钟)并且周期设置为未完成(布尔值 0)。如何在循环持续时间(30 分钟)后更新该数据库条目以将循环标记为完成(布尔值 1)?有没有办法用 ruby​​/rails 代码来处理这个问题,还是我必须执行一个 javascript 函数?

目标是能够使用 Cycle.all(:conditions..) 找到并显示所有已完成的循环并调用 SQL 数据库。我写了一个“完整的?” 循环模型中的方法,用于将循环的年龄与持续时间进行比较,但这对于 SQL 查找方法是无用的。

解决这个问题的最佳方法是什么?谢谢!

4

2 回答 2

2

定义一个运行类似...的 rake 任务。</p>

desc "Expire old cycles"
task :cron => :environment do
  expired = Cycle.all :conditions => ["expiration < ?", DateTime.now]
  expired.each { |c| c.expire! }
end

Wherec#expire!是一种方法,可以在数据库中将其标记为过期。然后rake cron通过 cronjob 设置为每 N 分钟运行一次。

如果您习惯在 SQL 中执行此操作,则可以通过编写查询来优化此操作UPDATE cycles SET complete = 1 WHERE expiration < NOW();

于 2011-01-19T03:40:40.810 回答
0

您可以添加另一个字段,假设Expired_time是循环完成时。例如:

# Here is the example record:
Duration  Created_at  Expired_time
30 mins   Time        Time + 30 mins

现在只需使用 Expired_time 检查当前日期(现在)以检查它是否完整。

于 2021-08-06T05:43:58.643 回答