Open5

Rails モデルのscope機能を理解する

potatomanpotatoman

scopeとは

モデルで条件を定義し名前を付け、それをコントローラーからメソッドのように呼び出せるようにする機能。

potatomanpotatoman

基本構文

scopeの作成

app/models/モデル.rb
class モデル < ApplicationRecord
  scope :スコープの名前, -> { 条件式 }
end

呼び出し

app/controllers/モデルs_controller.rb
@foo = モデル.スコープの名前
potatomanpotatoman

引数を渡すことも可能

引数ありscopeの作成

app/models/モデル.rb
class モデル < ApplicationRecord
  scope :スコープの名前, -> (仮引数){ 条件式 }
end

呼び出し

app/controllers/モデルs_controller.rb
@bar = モデル.スコープの名前(引数)
potatomanpotatoman

メリット

  • 共通化できる
  • 名前づけにより、controllerで条件を絞り込むよりも直感的に行える
  • クラスメソッドよりも簡潔に記述できる