我已经阅读了几个问题和http://guides.rubyonrails.org/action_mailer_basics.html关于如何使用Rails发送电子邮件,但似乎无法在我当前应用程序的上下文中使用它。
我有一个现有的emailer.rb
,除了他们接受的参数之外,还有一些方法是相同的,所以我复制了它们的格式:
def quotation_notification(q)
@recipients = q.recipient_email
@from = q.partner_name + "<#{q.partner_email}>"
@subject = "New Quotation from " + q.partner_name
@body[:q] = q
end
然后,我在名为emailers
的{{1}}中创建了一个新视图文件,该文件目前仅包含文本。
然后我从另一个控制器内部调用该函数并立即发送硬编码参数:
quotation_notification.rhtml
最后,我为q = QuotationEmail.new(:recipient_email => 'martin@domain.co.uk', :partner_name => 'Martin Carlin', :partner_email => 'martin@domain.co.uk')
# send email
Emailer.deliver_quotation_notification(q)
QuotationEmail
我得到的错误是class QuotationEmail
def initialize(recipient_email, partner_name, partner_email)
@recipient_email = recipient_email
@partner_name = partner_name
@partner_name = partner_email
end
end
最终我会发送更多参数,并希望附上一个pdf,但只是想弄清楚为什么这不起作用。
答案 0 :(得分:1)
您收到此错误是因为在初始化QuotationEmail对象时虽然您认为传递了3个参数,但实际上您只传递了一个哈希参数。初始化期待3.参见下面的示例
class A
def initialize(a,b=1,c=2)
puts a
puts b
puts c
end
end
a = A.new(:recipient_email => 'martin@domain.co.uk', :partner_name => 'Martin Carlin', :partner_email => 'martin@domain.co.uk')
#=> {:recipient_email=>"martin@domain.co.uk", :partner_name=>"Martin Carlin", :partner_email=>"martin@domain.co.uk"}
#=> 1
#=> 2
如果您尝试使用命名参数,则需要将初始化重新定义为
def initialize(recipient_email:a,partner_name:b,partner_email:c)
并按以下方式调用它 -
a = A.new(recipient_email:'martin@domain.co.uk', partner_name:'Martin Carlin', partner_email:'martin@domain.co.uk')