条件を指定せずに、 ActiveRecord::Relation
が欲しいとき
条件なし、つまりすべての ActiveRecord インスタンスを得るリレーションを得たい場合に Rails3 自体は scoped
を使っていましたが Rails4 ではそのかわりに all
を使うことになります。
Foo.scoped # for rails3
Foo.all # for rails4
なお、 Rails4 では scoped
がなくなったために、 Rails3 から Rails4 へバージョン更新する場合はひたすら scoped
を all
に変えることになります。
しかし、 Rails3 の環境で scoped
を all
に変えるとちょっと意味が変わってくる(返り値が ActiveRecord::Relation
or Array
)ので、移行途中のフェーズで全置換するのはちょっとマズイことになります。
Rails のバージョンで分岐させて両対応
(Rails::VERSION::MAJOR <= 3 ? Foo.scoped : Foo.all)
Rails のバージョンによって scoped
を使うのか all
を使うのかを切り替えています。
移行し終わったら、該当箇所を全て Foo.all
に変えれば良いです。
もっと短く両対応
Foo.where(nil)
where
に対して nil
あるいは false
を与えれば同じことになります。 where(nil)
は Rails3 でも Rails4 でも先の意図通りの挙動をするので便利です。
なお
Foo.where("1 = 1")
と、常に真となる条件を与えても効果としては同じですが、
この場合はもちろん実際に DB に投げる SQL にも "1 = 1"
がのっかってくることになります。