ume

scopeメソッドとは

目次

  1. scopeメソッドとは.
  2. 使い方.

scopeメソッドとは.

モデルにおけるscopeとはActiveRecordの機能の一つです.
モデル側で共通の条件式(クエリ処理)に名前を付けて定義し、その名前でメソッドのように呼び出すことができる仕組みのことです。要は名前で言うニックネームみたいなもの。例えば、「松田ゆうき」と言う人がいたときに名前を呼ぶ時毎回松田ゆうきというのは面倒臭いので「まっちゃん」と呼んだりする。つまりまっちゃん=松田ゆうき、と省略している.
例)モデルにscope定義 (publishedカラムはtrueかfalseで公開・非公開を管理)

class Blog < ApplicationRecord
where(published: true)
end 

↑のようなSQLがあった時 呼び出す時いちいち

Blog.where(published: true)

とデータベースから情報を取得できるがわかりにくい。なのでwhere(published: true)の処理にpublishedという名前をつけて

Blog.published

とした方が直感的に何がしたいかわかりやすい.

使い方.

class モデル名 < ApplicationRecord
  scope :スコープの名前, -> { 条件式 }
end

第一引数にシンボルを使ってスコープの名前を指定します.
第二引数の-> { 条件式 }はlambdaと言い、処理の中でメソッドを定義してくれます。 ->(アロー関数)はlambdaのリテラルです。 引数を定義すると、呼び出すときにブロックに渡すことができます。

補足.
ActiveRecordとは ⇨一言で言えば「RubySQLの翻訳機」です。 データベースに何かしらの命令(データベースからデータを取得、削除したり)をするときSQLという言語で命令しないといけないが、ActiveRecordがあるおかげでrubyで何かしらの命令をデータベースにできる.