我正在使用Rails 3.0.9,我有以下代码在发布评论时发送电子邮件。
class Mailer < ActionMailer::Base
def comment_notification(comment)
User.active.each do |user|
@user = user
mail(:to => @user.email, :subject => subject)
end
end
end
如果没有活动用户,则User.active为空,并且内部代码不会被执行。但是,由于缺少@user,视图将呈现并且视图失败。
上述代码由观察者
调用Mailer.comment_notification(comment).deliver
解决此问题的一种方法是将观察者中的代码更改为类似
的代码User.active.each do |recipient|
Mailer.comment_notification(comment, recipient).deliver
end
这是解决这种问题的正确方法吗?我希望我的观察者尽可能地瘦。
答案 0 :(得分:1)
是的,你的观察者修正是正确的。你应该循环并逐个发送电子邮件。邮件程序应该一次只发送一封电子邮件。这是留给延迟工作的最佳工作。你不想在电子邮件发送时等待。
以下是延迟工作的教程:http://railscasts.com/episodes/171-delayed-job
请务必查看延迟作业自述文件,特别注意“Rails 3 Mailers”部分:http://github.com/collectiveidea/delayed_job