scopeの解説
modelにscopeを設定して、コントローラー等で呼び出す。
-例-
Userモデルでscopeを設定する。
usersコントローラーで呼び出している。
app/models/user.rb
class User < ApplicationRecord
...
# scope : 呼び出す名前, -> { 処理 }
# deletedカラムがfalseであるものを取得する
scope :active, -> { where(deleted: false) }
# created_atカラムを降順で取得する
scope :sorted, -> { order(created_at: :desc) }
# activeとsortedを合わせたもの
scope :recent, -> { active.sorted }
...
end
app/controllers/users_controller.rb
class UsersController < ApplicationController
...
def index
# @users = モデル.scope名
@users = User.recent
end
...
end
##lambdaの使い方
lambdaとは、無名関数です。
さらに無名関数の正体は、RubyのProcオブジェクトというものになります。
無名関数とは、そのままの意味で「名前のない関数」です。
下記コードのようなものが無名関数と呼ばれます。(※どちらのコードも同義です。)
nameless_func = lambda { |n| n**2 }
nameless_func.(5)
#=> 25
scope :nameless_func, -> { |n| n**2 }
nameless_func(5)
#=> 25
##メリット
- モデルのscopeを定義することにより、複数のクエリを一つのメソッドとしてまとめられる。
- コントローラーで複数のクエリを書くよりもscopeを使えば、コードがスッキリする。