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