Domanda

Sto riscontrando uno strano problema durante l'invio di e-mail. Ricevo questa eccezione:

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'

Nel mio web_reservations_controller ho semplicemente un metodo che chiama

TestMailer.deliver_send_email

E il mio TesMailer è qualcosa del tipo:

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

Hai qualche idea?

Grazie! Roberto

È stato utile?

Soluzione

Il problema riguarda il modello utilizzato da ar_mailer per archiviare il messaggio. Puoi vedere nel backtrace che l'eccezione proviene da ActiveRecord :: Base.create quando chiama inizializza. Normalmente un costruttore ActiveRecord accetta un argomento, ma in questo caso sembra che il tuo modello non lo faccia. ar_mailer dovrebbe usare un modello chiamato Email. Hai questa classe nella tua directory app / modelli? In tal caso, viene sovrascritto qualcosa con inizializzazione? Se stai eseguendo l'override di inizializzazione, assicurati di fornire argomenti e chiama super.

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

Altri suggerimenti

Verifica che email_class sia impostato correttamente: http: // seattlerb. rubyforge.org/ar_mailer/classes/ActionMailer/ARMailer.html#M000002

Inoltre, non utilizzare le variabili di istanza. Prova:

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

Dai documenti: il metodo body ha un comportamento speciale. Prende un hash che genera una variabile di istanza che prende il nome da ogni chiave nell'hash contenente il valore a cui punta quella chiave.

Quindi qualcosa di simile è stato aggiunto al metodo sopra:

body :user => User.find(1)

Ti consentirà di utilizzare @user nel modello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top