Глобальный обратный вызов before_sending_mail в Rails - PullRequest
0 голосов
/ 14 июля 2010

Когда пользователь зарабатывает 10 баллов в моем приложении, он получает электронное письмо со словами «Вы только что заработали 10 баллов!»

Если кто-то зарабатывает 10 баллов в день в течение недели, я не против отправлять ему электронное письмо в день, но если кто-то зарабатывает 50 баллов за один день, я не хочу отправлять ему 5 электронных писем.

Так что я бы хотел перехватить каждое исходящее письмо до того, как оно будет отправлено, проверить его и определить, должен ли я его отправлять или нет. Какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Я бы прикрепил какой-то метод либо к модели User, либо к модели Point (если у вас есть что-то подобное).

class User
  def add_points(count)
    # Add points
    send_email if criteria_is_met
  end

  def send_email
    # Send email
  end
end

Не совсем "глобальный", но вместо непосредственного вызова почтовой программы, просто используйте что-то вроде этого, чтобы вы могли легко добавить условное поведение.

1 голос
/ 14 июля 2010

У меня есть похожее приложение, где у меня есть поле отметки времени sent_previous_email_at для клиента.Я просто проверяю:

send_email if send_previous_email_at < DateTime.today - 1.days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...