如何处理每天到期的数据?

时间:2018-11-25 00:58:49

标签: ruby-on-rails worker

我正在创建一个Rails应用程序,我有一个问题。 我将数据存储在一个表中,该表代表系统上的用户限制:例如,用户回答问题的次数(例如每天10次)。

id - count - user_id
1      3       1
--------------------
2      5       2
--------------------
3      10      3

所以我需要每天午夜重置count列。 有没有一种方法我不需要用户每天运行?

2 个答案:

答案 0 :(得分:0)

有很多解决此问题的方法,因此您必须确定可以接受的解决方案。

无论采用哪种解决方案,我都强烈建议为每个用户答案保存时间戳。

无论如何,您可以使用时间戳来根据需要派生计数,而不是存储 count 。但是也许每次得出该值可能对您来说效率太低。

如果您要存储此信息,则 count 值实际上是该计算的缓存,并且根据您描述的用法,计数仅与给定的一天有关。

因此,添加少量元数据可能会成功

|DATE    | ID | COUNT | USER_ID |
|20181124| 1  | 3     | 1       |

然后访问日期计数并根据需要清除数据,或者无限期保存。

答案 1 :(得分:0)

您可以使用clockwork并在模型中编写一个方法来更新计数器。

将此放置在Rails应用程序的/lib/clock.rb中

require 'clockwork'
require_relative '../config/boot'
require_relative '../config/environment'

include Clockwork

every(1.day, 'Update Counter', at: '00:00') do
  User.update_counter
end

以及在app / models / user.rb中:

def self.update_counter
  User.all.each { |user| user.update!(counter: 0)}
end