为什么我不能使用名为message的邮件程序方法?

时间:2017-02-03 20:41:16

标签: ruby-on-rails ruby-on-rails-5

我使用邮件程序生成器在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指南。

2 个答案:

答案 0 :(得分:1)

如果查看MessageDelivery的文档,似乎已经提供了一个名为message的方法

  

返回生成的Mail :: Message

我的假设是你的定义覆盖了这个提供的方法,但是你没有返回预期的Mail :: Message类型对象。

答案 1 :(得分:0)

正如另一个答案所述,名为message的类中已有一个方法。如果您按预期使用该类,这应该不是问题,因为邮件程序不应该有一条名为“message”的邮件,它应该具有更具描述性的名称。

Mailer对象的意图是为可能发送的消息定义上下文

例如,UserMailer将用于向用户构建消息。然后,每种不同类型的邮件都有一种方法,例如forgotten_passwordwelcome

该文档包含此后的a more thorough example