Как перестать отображаться при отправке электронной почты - PullRequest
0 голосов
/ 04 июля 2011

Я использую 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 Ответ

1 голос
/ 04 июля 2011

Да, ваше исправление наблюдателя верное.Вы должны перебирать и отправлять электронные письма по одному.Почтовик должен отправлять только одно письмо за раз.Хотя эту работу лучше оставить отложенной работе.Вы не хотите ждать, пока электронное письмо отправляется.

Вот учебник по отложенному заданию: http://railscasts.com/episodes/171-delayed-job

Не забудьте также проверить файл Readme для отложенного задания, заплатив специальныйвнимание к разделу "Rails 3 Mailers": http://github.com/collectiveidea/delayed_job

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...