Как лучше всего проверить, было ли письмо отправлено один раз при использовании rake task?

У меня есть простой почтовик, который отправляет пользователю еженедельные дайджест и грабли, который отправляет всем пользователям это электронное письмо, и оно прикрепляется к планировщику heroku.

Я хочу отправлять пользователю это письмо каждую неделю, но только один раз в неделю, независимо от того, сколько раз я запускаю rake send_weekly_digest

рассылка

class DigestMailer < ActionMailer::Base
  include Resque::Mailer
  default from: "company@email.com"

  def weekly_digest(user_id)
    @user = User.find(user_id)

    mail :to => @user.email, :subject => "Weekly Digest"
  end
end

Rake Task

desc "Send weekly email digest"
task send_weekly_digest: :environment do
  User.all.each do |user|
    DigestMailer.weekly_digest(user.id).deliver
  end
end

1 ответ

Решение

Добавьте столбец в свою таблицу пользователей с именем last_emailed_at или что-то подобное, а затем обновите этот столбец с отметкой времени при отправке еженедельного дайджеста.

Тогда вместо того, чтобы говорить User.all, в вашей задаче о граблях получите только тех пользователей, которые не были отправлены по электронной почте на прошлой неделе:

User.where("last_emailed_at < ?", 1.week.ago)
Другие вопросы по тегам