3

ユーザーに毎週のダイジェストを送信するシンプルなメーラーと、このメールをすべてのユーザーに送信する rake タスクがあり、heroku スケジューラーに固定されています。

このメールを毎週ユーザーに送信したいのですが、何回実行しても週に1回だけです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 に答える