【发布时间】:2013-08-06 16:59:37
【问题描述】:
我实际上正在创建一个时事通讯群发软件,我可以通过它即时创建一个新的邮件列表,上传一个模板,然后从该列表中向订阅者发送一封电子邮件,执行如下操作:
@suscribers.each do |suscriber|
NewsletterMailer.delay.send("#{@list.name}_newsletter", suscriber, @newsletter)
end
(注意延迟方法是因为我的后台作业使用sidekiq)
我试图覆盖 NewsletterMailer 类中 ActionMailer::Base 中的 method_missing 来处理这个逻辑,但它似乎没有被执行。我刚刚收到一个 NoMethodError 说“未定义的方法 `testing_newsletter' for NewsletterMailer:Class”。
我查看了 ActionMailer::Base#method_missing 源代码,发现它已经在执行一些逻辑,因此我们可以在不调用 new 的情况下执行 Mailer.name_of_the_email.deliver。此外,此方法受到保护。
但是,我是否仍然可以通过我的 NewsletterMailer 类中未硬编码的方法发送电子邮件?有没有办法将方法动态添加到 ActionMailer 控制器?
非常感谢。
【问题讨论】:
标签: ruby-on-rails ruby metaprogramming actionmailer method-missing