モデルでscopeを定義する話

プログラミングを本格的にスタートして3ヶ月目に入りましたさかもとです。

今回はモデルでscopeを定義すると便利!という話をアウトプットしようと思います。

 

scopeとは

よく利用する検索条件に名前を付けてひとまとめに定義できること

コントローラーで活用するメソッドと同じ感覚

 

使用例

app/models/book.rbが生成されておりbookテーブルに ID, 書名, 発売日, 価格カラムがある場合。

コンソールでデータベースに保存されている価格が3000円以上の本を検索したいと思うと

 

Book.where( ' price > ? ' , 3000 )

 

と検索する必要があります。

しかし1回だけならこれでいいかもしれませんが何度も検索しなくてはならない場合はどうでしょう?

上記と同じものを何度も書かなくてはなりません。

非常に面倒です。

なので予めbook.rbに定義してこの手間を省こう!というのがscopeを使う主旨です。

book.rbに

 

scope :costry, -> { where ( "price > ?" , 3000) }

 

このように定義しておけばコンソールではBook.costryの記述だけで当初と同じ解答を得られます。

再利用性と可読性を兼ね備え、わかりやすくなりました。

 

最後に

今回はこのような紹介になりましたが可読性をあげる方法はまだまだ沢山あるので今後も勉強を続ける中でまとめていこうと思います。

 

参考書籍

パーフェクトRuby on Rails