0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モデルのscopeについて

Posted at

初めまして、エンジニア転職目指して学習中のりんころです。
今回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のメリット

  1. 可読性の向上: クエリが簡潔になり、コードの可読性が上がります
  2. 再利用性: 定義したスコープは他のクエリでも再利用できます

スコープを使うことでいちいちクエリを書き込む必要がないというのは便利ですね!
最後まで読んでくださりありがとうございました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?