У меня странная проблема с отправкой писем. Я получаю это исключение:
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
Есть ли у вас какие-либо идеи?
Спасибо! Роберто





Убедитесь, что 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 имеет особое поведение. Требуется хэш, который генерирует переменную экземпляра, названную в честь каждого ключа в хеше, содержащего значение, на которое указывает этот ключ.
Итак, что-то вроде этого добавлено к методу выше:
body :user => User.find(1)
Позволит вам использовать @user в шаблоне.
Проблема заключается в модели, которую ar_mailer использует для хранения сообщения. Вы можете видеть на трассировке, что исключение исходит от ActiveRecord :: Base.create, когда он вызывает инициализацию. Обычно конструктор ActiveRecord принимает аргумент, но в этом случае похоже, что ваша модель этого не делает. ar_mailer должен использовать модель под названием Электронная почта. У вас есть этот класс в вашем каталоге app / models? Если да, то что-то отменяется с помощью инициализации? Если вы переопределяете инициализацию, обязательно укажите аргументы и вызовите super.
class Email < ActiveRecord::Base
def initialize(attributes)
super
# whatever you want to do
end
end