在我的邮件 Controller 中,在某些情况下(缺少数据),我们会中止发送电子邮件。
在这种情况下,如何退出 Controller 方法而不渲染 View ?
return if @some_email_data.nil?
由于 View 仍在呈现,因此没有解决问题(除非我添加了很多 nil 检查,否则在我尝试使用 @some_email_data 的每个地方都会抛出错误)
即使我做了零检查,它也会提示没有“发件人”(因为我应该在到达我设置发件人和主题的行之前做了一个“返回”。
render ... return
也不行基本上,RETURN 不会在邮件方法中返回!
最佳答案
我刚刚在这里遇到了同样的事情。
我的解决方案如下:
module BulletproofMailer
class BlackholeMailMessage < Mail::Message
def self.deliver
false
end
end
class AbortDeliveryError < StandardError
end
class Base < ActionMailer::Base
def abort_delivery
raise AbortDeliveryError
end
def process(*args)
begin
super *args
rescue AbortDeliveryError
self.message = BulletproofMailer::BlackholeMailMessage
end
end
end
end
使用这些包装邮件程序看起来像这样:
class EventMailer < BulletproofMailer::Base
include Resque::Mailer
def event_created(event_id)
begin
@event = CalendarEvent.find(event_id)
rescue ActiveRecord::RecordNotFound
abort_delivery
end
end
end
也是posted在我的博客中。
关于ruby-on-rails - rails 3 : how to abort delivery method in actionmailer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550809/