LoginSignup
177

More than 5 years have passed since last update.

posted at

updated at

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

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

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

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

modelクラスの中でメソッドを定義する際に、メソッド名の頭にself.を付けるとクラスメソッド
付けないとインスタンスメソッドになります!

article.rb
class Article < ActiveRecord::Base
  def hoge         #インスタンスメソッド
  end

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

上のはself.hogedef 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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
177