🐡

インスタンスメソッド?クラスメソッド?

2024/03/02に公開

内容

PF作成の時にメンターさんに教えて頂いたことをいつもで引き出せるように書いておこうと思います。下記、検索機能を実装した時の内容になります。

Controller

class Public::SearchesController < ApplicationController

  def search

    :
    :

    # f.submitで:wordと:modelを受け取ります
    @word = params[:word]
    @model = params[:model]
    if @model == "user"
      @records = User.search_for(@word, @model)
    else
      # @modelがuserでなければ、Studyモデルのメソッドを呼ぶ
      @records = Study.search_for(@word, @model)
    end
  end

end

Model

class Study < ApplicationRecord

    :
    :

  # @word、@modelを受け取り、Studyクラス内の条件に合う情報を抜き出します
  # クラスメソッドなので、selfの記載が必要
  def self.search_for(word, model)
    Study.where("title LIKE ?", "%" + (word.to_s) + "%")
  end

end

まとめ

インスタンスメソッドは、例えば@study=Study.newとインスタンスを用意し、@study.total_studytime(その@studyレコードに対して、勉強時間を計算してくれるメソッド)を

呼び出すという感じになりますが、今回の検索という機能に関しては、Study全体に対して呼びかけたいメソッドになります。(Studyがもつstudyデータの中で条件にあう情報を取得したい)

そういう場合は、クラス自体にメソッドを用意した方が効率が良いとの事です。

Discussion