Ruby on Rails实例与类方法

Sub*_*dra 3 ruby ruby-on-rails

我研究了Ruby类,实例方法和我发现的主要区别之间的主要区别是我们不需要创建该类的实例,我们可以直接在类名上直接调用该方法.

class Notifier 

def reminder_to_unconfirmed_user(user)
    headers['X-SMTPAPI'] = '{"category": "confirmation_reminder"}'
    @user = user
    mail(:to => @user["email"], :subject => "confirmation instructions reminder")
  end

end
Run Code Online (Sandbox Code Playgroud)

所以,在这里我reminder_to_unconfirmed_user在我的Notifier类中定义了实例方法,以便向未经证实的用户发送电子邮件,当我运行Notifier.reminder_to_unconfirmed_user(User.last)它时,如果它是实例方法而不是类方法则调用它.

MrY*_*iji 5

要定义类方法,请self在方法的定义(或类的名称)中使用关键字:

class Notifier
  def self.this_method_is_a_class_method
  end

  def Notifier.this_one_is_a_class_method_too
  end

  def this_method_is_an_instance_method
  end
end
Run Code Online (Sandbox Code Playgroud)

在您的情况下,reminder_to_unconfirmed_user应该定义为类方法:

class Notifier 

  def self.reminder_to_unconfirmed_user(user)
    # ...
  end

end
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

Notifier.reminder_to_unconfirmed_user(User.last)
Run Code Online (Sandbox Code Playgroud)