【发布时间】:2013-03-28 01:05:15
【问题描述】:
是否可以有一个只处理特定邮件程序的邮件观察者?
这样我们就可以有不同的邮件程序 - 邮件观察者对,在他们的邮件发送后共同处理任务。
例如,一个邮件观察者可以删除临时生成的附件,而另一个可以记录某些特定类型的消息(特定邮件)的发送。
如果可能,您能否说明我们如何在邮件程序和邮件观察器类之间建立“连接”?
非常感谢
【问题讨论】:
标签: ruby-on-rails-3.2 actionmailer observers
是否可以有一个只处理特定邮件程序的邮件观察者?
这样我们就可以有不同的邮件程序 - 邮件观察者对,在他们的邮件发送后共同处理任务。
例如,一个邮件观察者可以删除临时生成的附件,而另一个可以记录某些特定类型的消息(特定邮件)的发送。
如果可能,您能否说明我们如何在邮件程序和邮件观察器类之间建立“连接”?
非常感谢
【问题讨论】:
标签: ruby-on-rails-3.2 actionmailer observers
我发现了一些例子告诉我把它放到 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 类的关系。
【讨论】: