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 クラスメソッドで同等のことをするとわざわざ↑のように書かないとだめ。