あるオプションパラメータがあるかどうかで、条件が変わるような処理を書いてると、オプションがない場合、ActiveRecord::Relationが欲しくなるような場面があります。
例えば
@articles = Article
@articles = @articles.where(valid: true) if params[:valid]
みたいな感じになっちゃって@articles = Article
って何?な状態になります。
メソッド化しようとするとさらに困るのですが、scopedを使うと以下のように書けるようです。
@articels = Article.scoped
@articles = @articles.where(valid: true) if params[:valid]
なんか異臭がしなくなりましたね。
だから、どうした?って思う方もいるかもしれませんがメソッド化すると、
def self.valid(is_valid = nil)
scoped.where(valid: true) if is_valid
scoped
end
となります。scoped
なしで書かこうとするとちょっと困ります。
そんだけ。