是否可以拥有一个只处理特定邮件程序的邮件Observer?

时间:2013-04-05 14:46:41

标签: ruby-on-rails-3.2 actionmailer observers

是否可以拥有一个只处理特定邮件程序的邮件Observer?

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

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

如果有可能,你能举例说明我们如何使邮件与邮件观察者类之间的“连接”有效吗?

非常感谢

1 个答案:

答案 0 :(得分: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类。