3

我通过跟踪和错误注意到

UserMailer.newsletter(@user, @posts).deliver unless @posts.blank?

无论@post 的值如何,都会发送电子邮件,而

UserMailer.newsletter(@user, @posts).deliver! unless @posts.blank?

如果@posts 为空白,(使用交付!与交付)将不会正确发送电子邮件?

为什么是这样?我知道送货!如果无法发送则抛出异常,但不应该传递也听条件?

4

1 回答 1

5

用于source_location查找定义方法的位置:

UserMailer.newsletter(@user, @posts).method(:deliver).source_location
=> ["gems/mail-2.5.4/lib/mail/message.rb", 229]

这会将您指向邮件 gem 中的这些行并为您提供答案:

deliver!绕过检查 perform_deliveries 和 raise_delivery_errors。

于 2014-07-01T22:45:22.260 回答