延迟工作电子邮件在哪里有'谁发送电子邮件'逻辑

时间:2012-06-16 04:52:26

标签: ruby-on-rails ruby-on-rails-3 email delayed-job

在我的app我有某些事件会触发很多电子邮件(~100)。显然立即发送它们不是一种选择,所以我使用DelayedJob将它们排队并在处理请求后发送它们。我现在已经发现确定100个人发送电子邮件的逻辑非常重要,以至于需要一段时间才能运行,因此我也想要处理DelayedJob。 这个逻辑应该去哪里? (型号?邮件?)从模型发送邮件感觉不对。这里有最好的做法吗?

1 个答案:

答案 0 :(得分:2)

你应该写一个代表这份工作的班级。不是模型类,不是控制器类:作业类。

# app/jobs/mail_job.rb
class MailJob
  attr_accessor :first_option, :second_option

  def initialize(first_option, second_option)
    self.first_option = first_option
    self.second_option = second_option
  end

  def perform
    accounts = Account.where("some_key" => first_option).to_a
    # more complicated stuff goes here
    accounts.each do |account|
      AccountMailer.hello_message(account).deliver
      account.mark_hello_delivered!
    end
  end
end

job = MailJob.new(params["first"], params["second"])
Delayed::Job.enqueue(job)