やったこと
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 の昇順になっていることが分かります。