2008-09-25 5 views
2

У меня запуталась странная проблема с отправкой писем. Я получаю это исключение:Неверное количество ошибок аргументов с помощью 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' 

В моей web_reservations_controller У меня есть просто метод, призывающую

TestMailer.deliver_send_email 

И мой TesMailer что-то вроде:

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

Есть ли у вас какие-либо идеи?

Спасибо! Роберто

ответ

1

Проблема с моделью, которую использует ar_mailer для хранения сообщения. Вы можете видеть в backtrace, что исключение происходит из ActiveRecord :: Base.create, когда он вызывает инициализацию. Обычно конструктор ActiveRecord принимает аргумент, но в этом случае он похож на вашу модель. ar_mailer должен использовать модель под названием «Электронная почта». У вас есть этот класс в каталоге приложений/моделей? Если да, то что-то переопределено инициализацией? Если вы переопределяете инициализацию, обязательно дайте ей аргументы и вызовите super.

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

Убедитесь, что email_class установлен правильно: http://seattlerb.rubyforge.org/ar_mailer/classes/ActionMailer/ARMailer.html#M000002

Также не используйте переменные экземпляра. Попытка:

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

Из документов: метод кузова имеет особое поведение. Он принимает хэш, который генерирует переменную экземпляра, названную после каждого ключа в хеше, содержащую значение, на которое указывает этот ключ.

Так что-то вроде этого добавляли к вышеуказанному методу:

body :user => User.find(1) 

позволит использовать @user в шаблоне.