こんにちは。たなか(@tanaka_ricecake)です。
普段Ruby on Railsを使って開発をしています。
今回はRails初学者向けに『よく使う検索内容はscopeにまとめると良い』というテーマでお話してみようと思います。
scopeを使うことで特定のSQL文をメソッドとして利用できるようになります。
頻繁に使うSQL文はscopeとして用意しておくことでデータ管理も効率化され、コードも綺麗に書けるようになります。
もくじ
よく使う検索内容はscopeにまとめよう!
例えば以下のようなケースがあるとします。
- 『お知らせ記事』モデルに対し、公開・非公開のような状態をカラムで管理している
- ”公開しているお知らせ記事を、新しく作成された順”に表示する箇所が複数ある
上記のような場合、まずはお知らせ記事モデルにscopeを設定します。
NewsArticle.rb
scope :published, -> { where(status: 'published').order(created_at: :desc) }
上記scopeを設置したことで、モデルに対し「published」というメソッドを定義することができました。
こうしておくことでコントローラーでpublishedを利用することができます。
news_articles_controller.rb
class NewsArticlesController < ApplicationController
def index
@news_articles = NewsArticle.published
#もともとは @news_articles = NewsArticle.where(status: 'published').order(created_at: :desc) と書いていた!
end
indexアクション内の『@news_articles = NewsArticle.where(status: ‘published’).order(created_at: :desc)』と書いていたものが、scopeのおかげでだいぶスッキリしました!
まとめ
scopeを利用することで、コントローラーの肥大化も防げますし、可読性が上がるためコードを綺麗に保つことに繋がります。
『この検索、頻繁に使うなー』と思ったらscopeに切りだすことを意識してみると良いかと思います!
Rails初学者の方はぜひ参考にしてみてください!
短いですが、今回はここまで。
関連記事