Fro*_*ost 10 actionmailer interceptor ruby-on-rails-3
我正在尝试设置rails应用程序,以便我可以在不同的邮件传递方法之间进行选择,具体取决于某些条件是否为真.
所以,给出两种交付方式:
ActionMailer::Base.add_delivery_method :foo
ActionMailer::Base.add_delivery_method :bar
Run Code Online (Sandbox Code Playgroud)
我以为我能够创建一个电子邮件拦截器来做这样的事情:
class DeliveryMethodChooser
def self.delivering_email(message)
if some_condition
# code to use mail delivery method foo
else
# code to use mail delivery method bar
end
end
end
Run Code Online (Sandbox Code Playgroud)
但问题是,我不确定如何实际设置更改给定邮件使用的邮件传递方法.有任何想法吗?甚至可以动态选择要使用的delivery_method吗?
小智 17
您也可以将:delivery_method选项传递给mail方法:
def notification
mail(:from => 'from@example.com',
:to => 'to@example.com',
:subject => 'Subject',
:delivery_method => some_condition ? :foo : :bar)
end
Run Code Online (Sandbox Code Playgroud)
因此,事实证明您实际上可以将a Proc作为默认参数传递给ActionMailer.
因此完全可以这样做:
class SomeMailer < ActiveMailer::Base
default :delivery_method => Proc.new { some_condition ? :foo : :bar }
end
Run Code Online (Sandbox Code Playgroud)
我不知道我真的知道我喜欢这个解决方案,但它工作的时间是和它只会是一个时间相对较短.
| 归档时间: |
|
| 查看次数: |
5129 次 |
| 最近记录: |