[tips] Railsでscopeとクラスメソッドの使い分け

Class Plan < ActiveRecord::Base scope :visible_from, -> (user) {
where(user_id: user.id) if user.present?
}
end

結論から言うと

メソッドチェーンする場合はscopeを使う
しない場合は、クラスメソッドでok

Plan.visible_from(user).chain_method1.chain_method2

user.present?がtrueの場合
user_idで抽出した結果が返却される(ので、メソッドチェーンしてさらにクエリをつなげたりできる)
user.present?がfalseの場合
クラスメソッドならnilが返却されるところ、scopeで定義しているallを返してくれる(ので、メソッドチェーンしてさらにクエリをつなげたりできる)

Class Plan < ActiveRecord::Base def self.visible_from(user) if user.present? where(user_id: user.id) else all end end end クラスメソッドで同等のことをするとわざわざ↑のように書かないとだめ。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク