0

In my app I have certain events that trigger a lot of emails (~100). Obviously sending them immediately is not an option, so I'm using DelayedJob to queue them up and send them after the request is processed. I've now found that the logic to determine WHICH 100 people to email is heavy enough that it takes a while to run, so I'd like to DelayedJob that process as well. Where should this logic go? (model? mailer?) Sending mail from the model just feels wrong. Is there a best practice here?

4

1 回答 1

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)
于 2012-06-16T05:02:10.733 回答