RailsにおけるScope
scopeとはクラスメソッドを使う際、可読性を保つためにあるものである。
例えば、あるUserのidを降順にし、かつ5つだけ表示させたい場合、以下のようなメソッドを使うことになる。
User.order(id: desc).limit(5)
しかしながら、同じクエリ文が何回も出てくるとそのたびにこれを記述するのは面倒だし、わかりにくい。そこでそれを解決するためにscopeがある。
model
class User < ApplicationRecord scope :recent, -> { order(id: :desc).limit(5) } end
controller
class UsersController < ApplicationController def index @users = User.recent end
これで繰り返しがなくなり、コントローラーでも使えるようになる。さらにscopeでは引数を渡すこともできる。以下の通り。
model
class User < ApplicationRecord scope :recent, -> (count) { order(id: :desc).limit(count) } end
controller
class UsersController < ApplicationController def index @users = User.recent(10) end