私有方法`new'调用MyReminderMailer:Class

时间:2014-02-04 20:54:50

标签: ruby actionmailer

在控制器中,我有:

mailer = MyReminderMailer.new
邮件看起来像这样:

class MyReminderMailer < ActionMailer::Base
  def change_email
    mail(
      from:     default_from,
      to:       default_to,
      subject: "..."
    )
  end

  def default_from
    return '...'
  end

  def default_to
    return '...'
  end
end

但得到错误:私有方法`new'为MyReminderMailer:Class

调用

2 个答案:

答案 0 :(得分:12)

ActionMailer::Base有一个相当愚蠢且不直观的API。与控制器非常相似,您从不显式创建邮件程序的实例。相反,您将它们作为类与它们进行交互。 new中的ActionMailer::Base被标记为私有,并且该类的方法调用随后通过method_missing路由到其自身的新实例。就像我说的那样,不直观。

有关正确使用ActionMailer的更多信息,请查看guidesapi docs

答案 1 :(得分:3)

Ruby不允许以正常方式调用私有方法。 你可以用send方法调用它

SomeClass.send :method_name

#in your case
MyReminderMailer.send :new

而且你不需要ActionMailer对象。 要发送邮件,只需像使用类方法一样使用方法。

MyReminderMailer.change_email.deliver

希望这可以帮到你。