2013-09-29 4 views
0

Вот код в недавнем Railscast:Как отличить рубин класса и экземпляра методов

class UserMailer < ActionMailer::Base 
    default from: "[email protected]" 

    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?

ответ

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 
+0

ах да исходный код --- Я должен запомнить это .. спасибо человеку .. –

Смежные вопросы