2008-09-25 8 views
2

Je suis un problème étrange d'envoi de courriels. Je reçois cette exception:Mauvais nombre d'arguments erreur avec TestMailer

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' 

Dans mon web_reservations_controller j'ai une méthode simplement appeler

TestMailer.deliver_send_email 

Et mon TesMailer est quelque chose comme:

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

Avez-vous une idée?

Merci! Roberto

Répondre

1

Le problème est lié au modèle utilisé par ar_mailer pour stocker le message. Vous pouvez voir dans le backtrace que l'exception provient de ActiveRecord :: Base.create lorsqu'il appelle initialize. Normalement, un constructeur ActiveRecord prend un argument, mais dans ce cas, il ressemble à votre modèle. ar_mailer devrait utiliser un modèle appelé Email. Avez-vous cette classe dans votre répertoire app/models? Si oui, est-ce que quelque chose est surchargé avec initialize? Si vous redéfinissez initialize, assurez-vous de lui donner des arguments et appelez super.

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

Vérifiez que email_class est réglé correctement: http://seattlerb.rubyforge.org/ar_mailer/classes/ActionMailer/ARMailer.html#M000002

également ne pas utiliser les variables d'instance. Essayez:

class TestMailer < ActionMailer::ARMailer 
    def send_email 
    recipients "[email protected]" 
    from "[email protected]" 
    subject "TEST MAIL SUBJECT" 
    content_type "text/html" 
    end 
end 

De la docs: la méthode du corps a un comportement spécial. Il prend un hachage qui génère une variable d'instance nommée après chaque clé dans le hachage contenant la valeur vers laquelle pointe cette clé.

donc quelque chose comme ceci ajouté à la méthode ci-dessus:

body :user => User.find(1) 

vous permettra d'utiliser @user dans le modèle.

Questions connexes