如何辨别Ruby类和实例方法之间的区别

时间:2013-09-29 11:26:26

标签: ruby-on-rails ruby

以下是最近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类有什么特别的东西吗?

1 个答案:

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