0

我正在尝试每小时为模型运行一次计划更新,但前提是它是 24 小时前的最后一次更新。如果我只有@rentals = Rental.all.where(..) 我会得到一个wrong number of arguments (2 for 1)

def delayed_stat_updates
  @rentals = Rental.where("updated_at < ?", 24.hours.ago)
  StatsController.delay(queue: 'stats').stat_updates(@rentals)
  StatsController.delay(queue: 'stats').index_check(@rentals)
  StatsController.delay(queue: 'stats').update_stats_error_attribute(@rentals)
  StatsController.delay(queue: 'stats').error_notification_email
end

我该如何解决这个问题?另外,这是运行这些更新的好方法吗?以前我在每个方法中都抓取了对象,但是如果其中一个更新花费的时间太长,它可能会意外地开始抓取额外的对象以进行下一次更新。

4

1 回答 1

4

Rental.where("updated_at < ?", 24.hours.ago)是完全有效的,我认为问题可能是由 Arel(.where) 和 Array(.all) 对象之间的差异引起的。你试一试 Rental.where("updated_at < ?", 24.hours.ago).all

于 2012-05-15T16:16:04.480 回答