Rails5 でスコープを使う
Ruby Ruby on Rails
Published: 2019-05-19

やったこと

Rails5 でスコープを使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails -v
Rails 5.1.6.2

調査

スコープについて

スコープを設定することで、関連オブジェクトやモデルへのメソッド呼び出しとして参照される、よく使用されるクエリを指定することができます。スコープでは、where、joins、includesなど、これまでに登場したすべてのメソッドを使用できます。どのスコープメソッドも、常にActiveRecord::Relationオブジェクトを返します。

default scope を使う

あるスコープをモデルのすべてのクエリに適用したい場合、モデル自身の内部でdefault_scopeメソッドを使用することができます。

app/models/user.rb

class User < ApplicationRecord
  default_scope -> { order(name: :asc) }
end

モデルを呼び出すときは、default_scope が適用されます

app/controllers/users_controller.rb

class UsersController < ApplicationController
  def index
    @user = User.all
  end

発行されたSQL

SELECT "users".* FROM "users" ORDER BY "users"."name" ASC

default_scpe が適用されて name の昇順になっていることが分かります。

参考