2016-12-12 3 views
1

Я даю пользователям возможность получать, скажем, электронные письма на периодичность их выбора, например:Сохранение периодичности в Rails

Every day at 5am 

или

Every Friday at 11pm 

или даже

Every second Monday of the month at 12am 

Каким будет мой лучший выбор для хранения данных такого типа, чтобы довести его до Whenever gem?

Update

Я был в состоянии решить этот вопрос с советом @mudasobwa «ы в сочетании с cron_parser камнем. Поток процесса: вход

  • Получить пользователь из отобранного поля на интерфейсе
  • Разобрать его на внутреннем интерфейсе и де-коде в формат хрон (например 7 будет означать, что мне нужно будет отправлять электронную почту каждую неделю , поэтому код может быть «1 1 * * 1»), сохранить значение как periodicity.
  • Используйте драгоценный камень cron_parser, чтобы сгенерировать форму даты next_run, которая используется, чтобы сообщать всякий раз, когда драгоценный камень выполняет задания, которые они должны выполнять.

ответ

2

whenever gem accepts необработанный синтаксис cron. Вот почему самый простой способ, предусматривающий как можно меньше преобразований, состоял в том, чтобы хранить значения в формате raw cron.

При этом вы, вероятно, должны иметь парсер из /, чтобы разрешить вход пользователя в/из формата raw cron и все.

+0

Да в теории это довольно ясно, но что я должен хранить в базе данных? Мой процесс заключается в том, что всякий раз, когда каждый час проверяет получателей, которые еще не получили свои сообщения (поэтому он ищет устаревшие сообщения) и отправляет их. Эти сообщения имеют столбец, называемый next_send, который хранит дату/время, когда сообщение должно быть отправлено. Но чтобы получить дату в этом столбце, мне нужно проанализировать ее с начального ввода пользователя. –

+0

В базе данных вы должны хранить ** строки в необработанном формате cron **, как указано в моем ответе дважды. Smth like '" 0 0 27-31 * * "'. – mudasobwa

+0

Спасибо, так что в двух словах я бы сохранил эти необработанные данные cron и проанализировал его, чтобы получить дату next_run и установить его на моей модели? –