3

我有一个简单的邮件程序,它向用户发送每周摘要和 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
4

1 回答 1

5

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

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

User.where("last_emailed_at < ?", 1.week.ago)
于 2012-12-26T19:31:17.430 回答