检查使用rake任务时是否发送过一次电子邮件的最佳方法是什么?

时间:2012-12-26 18:42:46

标签: ruby-on-rails ruby rake scheduled-tasks mailer

我有简单的邮件程序,它发送用户每周摘要和rake任务,向所有用户发送此电子邮件,并将其固定到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

佣金任务

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 个答案:

答案 0 :(得分:5)

在您的users表中添加一个名为last_emailed_at或类似内容的列,然后在发送每周摘要时使用时间戳更新该列。

然后在您的rake任务中,而不是说User.all,只获得上周没有通过电子邮件发送的用户:

User.where("last_emailed_at < ?", 1.week.ago)