2016-01-19 2 views
0

My rails app отправит напоминание, если пользователь не добавил новые сообщения за три дня. Это определяется как задание грабли, которое запланировано.Каков правильный способ обработки напоминаний?

Задача назначается каждый день. Конечно, задача должна срабатывать только один раз для каждого пользователя. Пользователь должен получить его на третий день, а затем никогда больше. На десятый день я могу отправить совершенно другой адрес электронной почты.

  • Где и как сообщить приложению, что пользователь получил напоминание?
  • Где, когда и как очистить установленный «полученный статус напоминания» (если пользователь создает новое сообщение)?
  • Как сделать несколько напоминаний по электронной почте (например, через 5, 10, 15 дней)?

Я знаю, что добавление столбца под названием received_reminder в таблицу пользователя является опцией. Когда вы запускаете задачу, вы должны изменить received_reminder на true и очистить ее снова, когда пользователь создаст новое сообщение. Несколько напоминаний означают новый столбец для каждого напоминания. Например. received_reminder_5days и т. Д. - это кажется не сухим по мнению, и я подозреваю, что в целом может быть лучший способ.

Какова наилучшая практика с точки зрения электронных писем с напоминанием?

ответ

0

Вам даже не нужно дополнительное поле. Вы можете настроить массив reminder_days = [3,5,10,15] (например), а затем один раз в день проверить, является ли возраст d (в днях) последнего пользователя (который можно получить из базы данных) является членом reminder_days. Если это так, вы отправляете напоминание. Это напоминание является n+1-м напоминанием, если n - это индекс d в массиве reminder_days.

Чтобы быть действительно безопасным даже в том случае, если процесс ежедневной рассылки напоминаний электронной почты interrputed, вы можете сохранить количество напоминаний, которые уже были отправлены в поле reminder_count. Это поле устанавливается равным 0 всякий раз, когда пользователь создает новое сообщение, и увеличивается каждый раз, когда отправляется напоминание. С помощью этого поля вы можете в любой момент проверить, нужно ли еще напоминать, что нужно отправить сегодня, или нет (проверьте, n==reminder_count).

Смежные вопросы