2017-02-03 7 views
0

私はメーラー・ジェネレータを使用して、レール5の上に新しいメールを作成しました:メーラーメソッドのmessageという名前を持つことができないのはなぜですか?

$ rails g mailer mymailer message 

Railsはapplication_mailer、mymailer_mailer、ビューとテストを作成しました。 OK。

これは、レールによって生成されたメーラーです:

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: "[email protected]" 
    end 
end 

しかし、私は、私は次のエラー持ってメール送信しようとした時はいつでも:ダブル過ごした約2時間後に

NoMethodError: undefined method `reject!' for nil:NilClass 

をすべての設定ファイルをチェックしました。メソッドをblaに変更することを決めました。

Voilà:うまくいきました。しかし、なぜ?

BTW:私が見つけたmessageの方法はActionMailer::MessageDeliveryですが、それに関するRailsガイドはありません。

答えて

1

あなたがMessageDeliveryのためにドキュメントを見れば、すでに

Returns the resulting Mail::Message

は私の仮定は、あなたの定義は、この提供メソッドをオーバーライドしていることですが、あなたが戻っされていないmessageという名前で提供される方法があるように見えます予想されるMail :: Message typeオブジェクト。

0

もう1つの答えとして、すでにmessageというクラスにメソッドがあります。これはメーラーが "message"という名前の単一のメッセージを持つべきではないので、意図的にクラスを使用すると問題にはなりません。

Mailerオブジェクトの目的は、に送信される可能性のあるメッセージに対してコンテキストを定義することです。

たとえば、UserMailerは、ユーザーにメッセージを作成するために使用されます。次に、それぞれの異なるタイプのメッセージには、forgotten_passwordまたはwelcomeなどのメソッドがあります。

ドキュメントには、これに続くa more thorough exampleが含まれています。

関連する問題