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?

More than 1 year has passed since last update.

【Rails】scopeメソッドについて【初学者の疑問点を簡潔に解説】

Posted at

はじめに

 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

今回の疑問点

 今回の疑問点は、

  scopeメソッドについて
 
 です。 

 以前、1週間分の投稿を表示させる機能を実装している際に上記について疑問を持ちました。

疑問点についての解説

###結論
 scopetメソッドは、Railsのスコープ機能を使用するためのメソッドで、スコープ機能を使用することで、クエリを定義し、同じクエリを複数回使う場合でのメンテナンス性を上げることができる。

###scopeメソッドの使い方
記述方法は以下の通り。
モデルに記述します。

app/models/sample.rb
  scope: スコープ名, ラムダ式
app/models/sample.rb
  scope :active, -> { where(deleted: false) }

モデルで定義したら以下のようにコントローラで呼び出します。

app/controllers/samples_controller.rb
 定義したモデル名.スコープ名
app/controllers/samples_controller.rb
 Sample.active

スコープ機能を利用することで記述量が減り、メンテナンス性が高くなります。
また、複数回同じクエリを記述することがなくなり、Railsの基本理念の一つである、Don’t Repeat Yourself: DRYを実現することができます。

余談ですが、scopeメソッドを使用しなくても以下のように記述することで同様のことを実現することができます。

app/models/sample.rb
  def self.スコープ名(引数)
   処理
  end

引数は、不要であれば省略可能です。

まとめ

最後にポイントをまとめます。

  • scopetメソッドを使用することで、同じクエリを複数回使う場合でのメンテナンス性を上げることができる。
  • モデルにscope: スコープ名, ラムダ式と記述することで定義することができる
  • コントローラに定義したモデル名.スコープ名と記述することで呼び出すことができる
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?