はじめに
本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
今回の疑問点
今回の疑問点は、
scopeメソッドについて
です。
以前、1週間分の投稿を表示させる機能を実装している際に上記について疑問を持ちました。
疑問点についての解説
###結論
scopetメソッドは、Railsのスコープ機能を使用するためのメソッドで、スコープ機能を使用することで、クエリを定義し、同じクエリを複数回使う場合でのメンテナンス性を上げることができる。
###scopeメソッドの使い方
記述方法は以下の通り。
モデルに記述します。
scope: スコープ名, ラムダ式
scope :active, -> { where(deleted: false) }
モデルで定義したら以下のようにコントローラで呼び出します。
定義したモデル名.スコープ名
Sample.active
スコープ機能を利用することで記述量が減り、メンテナンス性が高くなります。
また、複数回同じクエリを記述することがなくなり、Railsの基本理念の一つである、Don’t Repeat Yourself: DRY
を実現することができます。
余談ですが、scopeメソッドを使用しなくても以下のように記述することで同様のことを実現することができます。
def self.スコープ名(引数)
処理
end
引数は、不要であれば省略可能です。
まとめ
最後にポイントをまとめます。
- scopetメソッドを使用することで、同じクエリを複数回使う場合でのメンテナンス性を上げることができる。
- モデルに
scope: スコープ名, ラムダ式
と記述することで定義することができる - コントローラに
定義したモデル名.スコープ名
と記述することで呼び出すことができる