どうもこんにちは。
今回は、初心に帰ってクラスメソッドとインスタンスメソッドについてまとめます。
まずは実行される時の形から覚える
クラスメソッド
クラスメソッドは以下のような形で実行されます。
Railsコンソール
# newメソッド
pry(main)> Sample.new
# createメソッド
pry(main)> Sample.create(name: 'サンプルA')
# findメソッド
pry(main)> Sample.find(1)
# allメソッド
pry(main)> Sample.all
インスタンスメソッド
インスタンスメソッドは以下のような形で実行されます。
Railsコンソール
# インスタンスを作成してから...
pry(main)> sample = Sample.new
# saveメソッド
pry(main)> sample.save
# updateメソッド
pry(main)> sample.update(name: 'サンプルB')
違いは...
これらの違いは、メソッドを実行するのが「モデル(クラス)に対して」なのか「インスタンスに対して」なのかです。
定義する時の違い
クラスメソッド
その1 メソッド名の前にselfを明示的に記述して定義する
class Sample
def self.sample_method
# 何かしらの処理
end
end
self
はメソッドを定義する対象を指します。定義した箇所でのself
はSample
なので、Sample
クラスに対してメソッドを定義したことになります。そのため、self
をSample
に置き換えて定義しても問題ないです。
その2 特異クラスの中に定義する
class Sample
class << self
def sample_method
# 何かしらの処理
end
end
end
特異クラスの説明をすると長いので省略しますが、特異クラスの中に定義してもクラスメソッドとして使用することができます。class << self; end
の間では、複数のメソッドを定義することができます。
インスタンスメソッド
class Sample
def sample_method
# 何かしらの処理
end
end
インスタンスメソッドの場合に何も考えずに、メソッドを定義すればOKです。