初めまして、エンジニア転職目指して学習中のりんころです。
今回railsのscope機能についてちょっとまとめてみました。
scope機能って何?
scopeとは、モデル側であらかじめ特定の条件式に対して名前をつけて定義し、その名前でメソッドの様に条件式を呼び出すことが出来る仕組みのことです。
簡単にいうと、モデルで、特定のクエリをメソッド化しておいて、コードが読みやすいようにする機能のことです!
【scopeの基本形】
class モデル名 < ApplicationRecord
scope :スコープの名前, -> { 条件式 }
end
例文
class Article < ApplicationRecord
scope :published, -> { where(status: 'published') } ⬅︎statusカラムがpublishedのデータを抽出するメソッド
scope :recent, -> { order(created_at: :desc) } ⬅︎Articleモデルのデータを作成時間降順に並び替えるメソッド
end
指定したscopeを以下のようにして呼び出せます。
#Blogモデルに定義したスコープのpublishedを使用する場合
Blog.published
⭐️scopeは、コントローラーやviewでも使えます!
コントローラーでの使用
コントローラーでスコープを使うと、特定の条件に合ったデータを簡単に取得できます!例えば、次のように使えます!
class ArticlesController < ApplicationController
def index
@published_articles = Article.published
end
end
この例では、published
スコープを使って、公開された記事だけを取得しています。
ビューでの使用
controllerでデータ抽出できたので、もちろんviewファイルでもデータを表示することができます!!
例えば、次のように書けます
<% @published_articles.each do |article| %>
<h2><%= article.title %></h2>
<p><%= article.content %></p>
<% end %>
ここでは、コントローラーで取得した公開された記事をループして表示しています。
スコープを使うことで、ロジックをモデルにまとめることができ、
コントローラーやビューをシンプルに保つことができます!
scopeのメリット
- 可読性の向上: クエリが簡潔になり、コードの可読性が上がります
- 再利用性: 定義したスコープは他のクエリでも再利用できます
スコープを使うことでいちいちクエリを書き込む必要がないというのは便利ですね!
最後まで読んでくださりありがとうございました!