0

我已经阅读了一些关于如何使用 Rails 发送电子邮件的问题和http://guides.rubyonrails.org/action_mailer_basics.html,但似乎无法让它在我当前应用程序的上下文中工作。

我有一个现有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然后我在named中创建了一个新的视图文件,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

我得到的错误是ArgumentError (wrong number of arguments (1 for 3))

最终,我将发送更多参数,并希望附上一个 pdf,但只是想弄清楚为什么这首先不起作用。

4

1 回答 1

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')
于 2013-09-07T12:17:59.943 回答