TestMailer的参数数量错误
时间:2020-03-06 14:42:48 来源:igfitidea点击:
我在发送电子邮件时遇到一个奇怪的问题。我收到此异常:
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目录中是否有此类?如果是这样,是否会使用Initialize覆盖任何内容?如果要覆盖initialize,请确保为其提供参数并调用super。
class Email < ActiveRecord::Base def initialize(attributes) super # whatever you want to do end end