scope(スコープ)とは
特定のSQL文をメソッドのように呼び出すことができる機能のことです。
下記のように、モデル内にscopeを定義することで使用することができます。
hoge_hoge.rb
class HogeHoge < ApplicationRecord
scope :active, -> { where(deleted: false) }
scope :by_account, -> lambda{|account_id|where(account_id: account_id)}
end
# 使用例
HogeHoge.active
HogeHoge.by_account(params[:account_id])
HogeHoge.by_account(params[:account_id]).active
何が便利なのか?
・コードが短くなる。
・適切なscope名をつけることで、直感的に読みやすいコードになる。
・何度も同じようなクエリを使いまわしている場合、
scopeを使用していれば、一箇所修正するだけで済む。
参考記事:
https://pikawaka.com/rails/scope
https://qiita.com/ozin/items/24d1b220a002004a6351
https://qiita.com/ngron/items/14a39ce62c9d30bf3ac3