Как обращаться с данными, срок действия которых истекает каждый день? - PullRequest
0 голосов
/ 25 ноября 2018

Я создаю приложение rails и у меня есть вопрос.У меня есть данные, хранящиеся в таблице, которая представляет пользовательские ограничения в системе: например, сколько раз пользователь отвечает на вопрос (10 в день).

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

Так что мне нужно сбрасывать столбец подсчета каждый день вполночь.Есть ли способ, которым мне не нужно, чтобы рабочий работал каждый день?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы можете использовать часовой механизм и написать метод в вашей модели для обновления счетчика.

поместите это в /lib/clock.rb в вашем приложении rails

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

и в приложении / models / user.rb:

def self.update_counter
  User.all.each { |user| user.update!(counter: 0)}
end
0 голосов
/ 25 ноября 2018

Существует множество вариантов решения этой проблемы, поэтому вам придется решить, что является приемлемым для вас.

Независимо от вашего решения, я настоятельно рекомендую сохранять метку времени для каждого пользовательского ответа.

В любом случае, вместо сохранения count , вы можете использовать метку времени для получения необходимого количества.Но, возможно, получение этого значения каждый раз может быть слишком неэффективным для вас.

Если вы хотите сохранить эту информацию, значение count фактически является кешем для этих вычислений и основано на использованииВы описали, подсчет относится только к данному дню.

Таким образом, добавление небольших метаданных может помочь

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

И получить доступ к счетчику за дату и очистить данные по мере необходимости, илихранить бесконечно.

...