在Rails中发送简单的电子邮件

时间:2013-09-07 09:58:23

标签: ruby-on-rails ruby ruby-on-rails-2

我已经阅读了几个问题和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,但只是想弄清楚为什么这不起作用。

1 个答案:

答案 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')