Как лучше всего проверить, было ли письмо отправлено один раз при использовании 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)