4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】モデルにインスタンスメソッドを定義する方法

Last updated at Posted at 2021-12-30

##モデルにメソッドを定義する理由
モデルに書くのはvalidatesやbelongs_to,has_manyなどだけでなく、メソッドも定義できる。

もちろんモデルを使わなくても小さいサービスであればコントローラーでも全然問題ないが、
理由として少し大きなサービスになってくると、すぐにコントローラーのコード量が増えてしまうからである。(ファットコントローラー)

その時は理解できても、数ヶ月後にコードを見返すと何のコードなのかわからなくなってしまう可能性がある。

##例を交えて解説

user_controller.rb

def index
  @user = User.find(1)
  @my_age = @user.too_young ⬅️
end

このtoo_youngがインスタンスメソッドというもので、モデルで書いたメソッドを
コントローラーで呼び出している。

user.rb

class User < ApplicationRecord
  validates :username, presence: true
  validates :email, presence: true 

  #ここがインスタンスメソッド
  def too_young
    if self.age >= 20  #20歳以上の場合
       return "大人です!" 
    else  #20歳以下の場合
       return "子供です!"
    end
  end 
end

too_youngメソッド内に「self」というものがある。
この「self」は何かというとusers_controller.rbで定義された@userのこと。

@userというインスタンスに対して「.(ドット)」で繋げてインスタンスメソッドを呼び出す時、インスタンスメソッド内では「self」が使え、self=呼び出し元のインスタンス(@user)となる。

インスタントメソッド内のselfは省略可能

##インスタントメソッドとは
インスタンスメソッドとは、作成したインスタンスから実行出来るメソッドのこと。
initializeメソッドでインスタンス変数に代入し、情報を保持している。

インスタンスメソッドは、このインスタンスごとに保持している情報を使って処理を書くことが出来る。

インスタントメソッドとは別にクラスメソッドがあるが、使い分けはクラスメソッドは全体で扱うべき情報を扱い、インスタンスメソッドは個々で扱うべき情報を扱うことを認識しておけばいい。

##参考記事
Railsのモデルに書いたメソッドってどうやってコントローラで使うの?
【Ruby】 たい焼きで理解するオブジェクト指向におけるクラスの概念
【Ruby基礎】クラスメソッドとインスタンスメソッドの違いについて簡単にまとめてみた

4
3
0

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
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?