如何在发送电子邮件时停止呈现视图

时间:2011-07-03 23:35:15

标签: ruby-on-rails

我正在使用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

这是解决这种问题的正确方法吗?我希望我的观察者尽可能地瘦。

1 个答案:

答案 0 :(得分:1)

是的,你的观察者修正是正确的。你应该循环并逐个发送电子邮件。邮件程序应该一次只发送一封电子邮件。这是留给延迟工作的最佳工作。你不想在电子邮件发送时等待。

以下是延迟工作的教程:http://railscasts.com/episodes/171-delayed-job

请务必查看延迟作业自述文件,特别注意“Rails 3 Mailers”部分:http://github.com/collectiveidea/delayed_job