在 Rails 中发送邮件时,通常会做这样的事情:
UserMailer.password_reset(user).deliver
但是如果我们查看 UserMailer
内部,我们可以看到:
def password_reset(user) # not self.password_reset
# ...
end
注意方法名没有前缀self
。看着它,似乎您需要先实例化对象,如下所示。 Rails 如何做到这一点?
UserMailer.new.password_reset(user).deliver
最佳答案
这是一个很好的问题。在源代码 ( https://github.com/rails/rails/blob/master/actionmailer/lib/action_mailer/base.rb ) 中,Rails 使用 method_missing 创建 ActionMailer 的新实例。以下是来源的相关摘录:
def method_missing(method_name, *args) # :nodoc:
if respond_to?(method_name)
new(method_name, *args).message
else
super
end
end
关于ruby-on-rails - 当邮件程序未被定义时,您如何在邮件程序上调用类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17088619/