永遠に外国人でいたい

思考ログと技術メモ

Rails::scopeをModelに書いてみる

ユーザー向けのViewは公開(public_pageの値が1)かつアクセスランキング順に実装したかった。

# app/models/hoge.rb

scope :publics, -> {where("public_page = 1").order("visitors DESC")}
# app/controllers/hoges_controller.rb

def hoge
  @hoges = Hoge.publics
end

変数を扱い場合

# app/models/hoge.rb

scope :hogehoge, -> (category) {where("#{category} = 1")}
# app/controllers/hoges_controller.rb

def fuga
  @hoge = Hoge.hogehoge('hoge') # hogeというカテゴリにチェックがついているものを呼び出す
end

前者はdefault_scopeを使うべきだろうか。 それは今後の課題。