scopeでmodelにDBアクセス責務を移譲
RailsではModel.where()を使っていろいろな場所で同条件のクエリを発行することが可能だが、 修正が必要になった際に複数箇所修正が必要になったり、DRYの理念に則っていない。
これらをうまく解消するために、scopeという機能を使ってクエリ発行の責務をmodelに任せる
scopeを定義
class User < ActiveRecord::Base scope :activated, -> { where(activated: true)} end
呼び出し方
User.activated
これでscopeに記述した条件のクエリが発行される。
また呼び出し例からわかる通り、where()で条件を記述するよりも scopeで文脈を示す方が何のデータを取得しているのか理解しやすくなる。
scopeを使うとDRYに則した実装になるだけでなく、可読性の向上も期待できる。