3
2

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 3 years have passed since last update.

[Rails]scopeを使いこなす!

Posted at

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を使えば、コードがスッキリする。
3
2
1

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?