はじめに
Railsチュートリアルを進める中で、少しわかりにくかったのでまとめてみることにしました。
違い
インスタンスメソッド
レシーバがあるメソッド
(レシーバとは.の前に書かれたメソッドを呼び出すオブジェクト)
user.name
[1.2.3].length
クラスメソッド
レシーバがクラスであるメソッド
User.new
newがクラスメソッド
上記の例では、Userクラスのオブジェクトを作成
クラスメソッドの定義方法
Railsチュートリアル9章でも出てきますが、selfを使って2種類の方法で定義することができます。
①メソッド名の前にselfを記述する
class User < ApplicationRecord
・
・
def self.new_token
SecureRandom.urlsafe_base64
end
self=Userとなる
②class << self
複数のクラスメソッドを書く際は、こっちの方が便利。
class User < ApplicationRecord
.
.
def new_token
SecureRandom.urlsafe_base64
end
class << selfを記述しておくことで、それぞれのクラスメソッドにはselfはいらない。
ちなみに
def User.new_token
と、クラス名をそのまま記述する方法でも良いが、クラス名が変わった際に大変。
まとめ
名前 | 定義方法 | 呼び出し |
---|---|---|
インスタンスメソッド | def メソッド名 | インスタンス.メソッド |
クラスメソッド | def self.メソッド名 | クラス.メソッド |