Railsのmodelクラスのselfが曖昧だったので

More than 1 year has passed since last update.

こんにちは!Rails初心者の僕が最近、躓いた点がこちらです。

modelクラスのselfって何だ....


1.クラスメソッドとインスタンスメソッド

modelクラスの中でメソッドを定義する際に、メソッド名の頭にself.を付けるとクラスメソッド

付けないとインスタンスメソッドになります!


article.rb

class Article < ActiveRecord::Base

def hoge #インスタンスメソッド
end

def self.hoge #クラスメソッド
end
end


上のはself.hogeはdef Article.hogeと同じ意味ですね!


2.使い分けについて

インスタンスメソッドはそれぞれのインスタンスに対して参照などをするメソッドとして使います!

クラスメソッドはmodelクラスのレコードを検索するなどの用途や作成されたインスタンスの数を数えるなど、個々のインスタンスには紐付けずクラスに対して働きかけるメソッドです!


3.メソッド内でselfを使用する場合

クラスメソッド内でselfを使うとクラスを指し、インスタンスメソッド内でselfはそのインスタンスになります!


article.rb

class Article < ActiveRecord::Base

def hoge #インスタンスメソッド
end

def self.hoge #クラスメソッド
end

def pdf #インスタンスメソッド
self.hoge #インスタンスメソッドのhogeが呼ばれる
hoge #インスタンスメソッドのhogeが呼ばれる
self.class.hoge #こうするとクラスメソッドのhogeを呼べる
end

def self.pdf #クラスメソッド
self.hoge #クラスメソッドのhogeが呼ばれる
hoge #クラスメソッドのhogeが呼ばれる
end
end


モデルも上手く利用してアプリケーション創っていきたいな...