7/29~ プチ断食日記をスタート! 毎日更新中!

【Rails】よく使う検索内容はscopeにまとめると良いですよ【初学者必見】

ruby-on-rails

こんにちは。たなか(@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のおかげでだいぶスッキリしました!

まとめ

ruby-on-rails

scopeを利用することで、コントローラーの肥大化も防げますし、可読性が上がるためコードを綺麗に保つことに繋がります。

『この検索、頻繁に使うなー』と思ったらscopeに切りだすことを意識してみると良いかと思います!

Rails初学者の方はぜひ参考にしてみてください!

短いですが、今回はここまで。

関連記事

【初学者】Rails tutorialを一周してみて。もっと楽に達成するためのコツをまとめる【必見】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です