質問

メールの送信時に奇妙な問題が発生しています。この例外が発生します:

ArgumentError (wrong number of arguments (1 for 0)):
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/base.rb:642:in `initialize'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/base.rb:642:in `new'
/usr/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/base.rb:642:in `create'
/usr/lib/ruby/gems/1.8/gems/ar_mailer-1.3.1/lib/action_mailer/ar_mailer.rb:92:in `perform_delivery_activerecord'
/usr/lib/ruby/gems/1.8/gems/ar_mailer-1.3.1/lib/action_mailer/ar_mailer.rb:91:in `each'
/usr/lib/ruby/gems/1.8/gems/ar_mailer-1.3.1/lib/action_mailer/ar_mailer.rb:91:in `perform_delivery_activerecord'
/usr/lib/ruby/gems/1.8/gems/actionmailer-2.1.1/lib/action_mailer/base.rb:508:in `__send__'
/usr/lib/ruby/gems/1.8/gems/actionmailer-2.1.1/lib/action_mailer/base.rb:508:in `deliver!'
/usr/lib/ruby/gems/1.8/gems/actionmailer-2.1.1/lib/action_mailer/base.rb:383:in `method_missing'
/app/controllers/web_reservations_controller.rb:29:in `test_email'

私の web_reservations_controller には、単純なメソッド呼び出しがあります

TestMailer.deliver_send_email

私の TesMailer は次のようなものです。

class TestMailer < ActionMailer::ARMailer
  def send_email
    @recipients = "xxx@example.com"
    @from = "xxx@example.com"
    @subject = "TEST MAIL SUBJECT"
    @body = "<br>TEST MAIL MESSAGE"
    @content_type = "text/html"
  end
end

何かアイデアはありますか?

ありがとう!ロベルト

役に立ちましたか?

解決

問題は、ar_mailer がメッセージを保存するために使用しているモデルにあります。バックトレースを見ると、Initialize を呼び出すときに ActiveRecord::Base.create から例外が発生していることがわかります。通常、ActiveRecord コンストラクターは引数を受け取りますが、この場合、モデルは引数を受け取っていないようです。ar_mailer は Email というモデルを使用する必要があります。このクラスは app/models ディレクトリにありますか?その場合、initialize で何かがオーバーライドされますか?初期化をオーバーライドする場合は、必ず引数を与えて super を呼び出してください。

class Email < ActiveRecord::Base
  def initialize(attributes)
    super
    # whatever you want to do
  end
end

他のヒント

email_class が正しく設定されていることを確認します。 http://seattlerb.rubyforge.org/ar_mailer/classes/ActionMailer/ARMailer.html#M000002

また、インスタンス変数は使用しないでください。試す:

class TestMailer < ActionMailer::ARMailer
  def send_email
    recipients "roberto.druetto@gmail.com"
    from "roberto.druetto@gmail.com"
    subject "TEST MAIL SUBJECT"
    content_type "text/html"
  end
end

ドキュメントから:body メソッドには特別な動作があります。これはハッシュを受け取り、そのキーが指す値を含むハッシュ内の各キーにちなんで名付けられたインスタンス変数を生成します。

したがって、上記のメソッドに次のようなものが追加されました。

body :user => User.find(1)

使用できるようになります @user テンプレート内にあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top