2

是否可以有一个只处理特定 Mailer 的邮件观察者?

这样我们就可以有不同的邮件程序 - 邮件观察者对,在他们的邮件发送后共同处理任务。

例如,一个邮件观察者可以删除临时生成的附件,而另一个可以记录某些特定类型的消息(特定邮件程序的)的发送。

如果可能,您能否说明我们如何在邮件程序和邮件观察器类之间建立“连接”?

非常感谢

4

1 回答 1

4

我发现了一些示例告诉将其放入 config/initializers/ 中的任何文件中:

ActionMailer::Base.register_observer(MyMailObserver)

然而,这是一个全局设置。

我在深入研究api后找到了解决方案。我意识到 register_observer() 是一个类方法,所以我尝试将它应用于我的app/mailer/report_mailer.rb类:

class ReportMailer < ActionMailer::Base
  default from: "my_email@my_domaine.com"

  def monthly_report(user, report_name, file_name, file_path)
    @user = user
    @report_name = report_name
    attachments[file_name] = File.read(file_path)
    mail(:to => user.email, :subject => "Generated report for #{report_name} (automatic message)")
  end
end

我设法在config/initializers/my_mailer_observer_initializer.rb中为我的邮件程序初始化我的观察者来应用它:

ReportMailer.register_observer(MyMailObserver)

所以我让 MyMailerObserver 与我的 ReportMailer 类有关,而没有其他 Mailer 类。

于 2013-04-05T17:39:07.117 回答