以下是最近Railscast中的一些代码:
class UserMailer < ActionMailer::Base
default from: "from@example.com"
def password_reset(user)
@user = user
mail :to => user.email, :subject => "Password Reset"
end
end
这是在控制器中
def create
user = User.find_by_email(params[:email])
UserMailer.password_reset(user).deliver
redirect_to :root, :notice => "Email sent with password reset instructions."
end
password_reset
方法对我来说看起来像一个实例方法,但它看起来像是一个类方法。它是实例还是类方法,或者这个UserMailer
类有什么特别的东西吗?
答案 0 :(得分:2)
查看源代码(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