🐡
インスタンスメソッド?クラスメソッド?
内容
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