我正在创建一个Rails应用程序,我有一个问题。 我将数据存储在一个表中,该表代表系统上的用户限制:例如,用户回答问题的次数(例如每天10次)。
id - count - user_id
1 3 1
--------------------
2 5 2
--------------------
3 10 3
所以我需要每天午夜重置count列。 有没有一种方法我不需要用户每天运行?
答案 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