В вашей таблице users
может быть строковый столбец email_frequency_preference
, в котором хранятся их предпочтения.Затем вы можете найти пользователей по их частоте электронной почты:
User.find_all_by_email_frequency_preference # :instantly | :weekly | :monthly
Я также предлагаю иметь модель Event
с именем и описанием, чтобы представлять события, которые могут произойти, о которых вы хотите уведомить своих пользователей.Затем вы можете найти события по дате их создания:
Event.find :created_at => start_date..Date.today
Теперь вам нужно отдельно обработать все три частотных предпочтения:
При каждом событии найти всепользователи, которые предпочитают мгновенные уведомления о событиях по электронной почте и отправляют их им немедленно.
В конце каждой недели можно найти все события, которые произошли на этой неделе:
start_date = Date.today.beginning_of_week
Объедините их описания в одном электронном письме, затем найдите всех пользователей, которые предпочитают еженедельные почтовые уведомления о событиях, и отправьте их им.
В конце каждого месяца найдите все события, которые произошли во времяmonth:
start_date = Date.today.beginning_of_month
Объедините их описания в одном письме, затем найдите всех пользователей, которые предпочитают ежемесячные уведомления по электронной почте, и отправьте их им.