Неверное количество аргументов ошибка с TestMailer - PullRequest
2 голосов
/ 25 сентября 2008

У меня странная проблема с отправкой электронной почты. Я получаю это исключение:

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

Есть идеи?

Спасибо! Roberto

Ответы [ 2 ]

1 голос
/ 26 сентября 2008

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

class Email < ActiveRecord::Base
  def initialize(attributes)
    super
    # whatever you want to do
  end
end
0 голосов
/ 25 сентября 2008

Убедитесь, что 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 в шаблоне.

...