我使用邮件程序生成器在rails 5上创建了一个新邮件:
$ rails g mailer mymailer message
Rails创建了application_mailer,mymailer_mailer,视图和测试。确定。
这是由rails生成的邮件:
class MymailerMailer < ApplicationMailer
# Subject can be set in your I18n file at config/locales/en.yml
# with the following lookup:
#
# en.mymailer_mailer.message.subject
#
def message
@greeting = "Hi"
mail to: "to@example.org"
end
end
但每当我尝试发送邮件时,我都会收到以下错误:
NoMethodError: undefined method `reject!' for nil:NilClass
花了大约两个小时仔细检查每个配置文件后,我决定将方法更改为bla
...
Voilà:有用,好的!但为什么呢?
BTW:我发现的message
方法来自ActionMailer::MessageDelivery
,但没有提及Rails指南。
答案 0 :(得分:1)
如果查看MessageDelivery
的文档,似乎已经提供了一个名为message
的方法
返回生成的Mail :: Message
我的假设是你的定义覆盖了这个提供的方法,但是你没有返回预期的Mail :: Message类型对象。
答案 1 :(得分:0)
正如另一个答案所述,名为message
的类中已有一个方法。如果您按预期使用该类,这应该不是问题,因为邮件程序不应该有一条名为“message”的邮件,它应该具有更具描述性的名称。
Mailer
对象的意图是为可能发送的消息定义上下文。
例如,UserMailer
将用于向用户构建消息。然后,每种不同类型的邮件都有一种方法,例如forgotten_password
或welcome
。
该文档包含此后的a more thorough example。