とりあえずnull

プログラミングの勉強日記

Rails4ではfind(:all)が使えなくなる事実

こんな人には参考になるかも

・開発中のRailsApp(Rails3系)内でfind(:all)使っちゃってる人

・これからRails4に移行しようとしている人

 

ランダムで表示する処理がしたかったのが事の始まり

ユーザーが持っているアイテムデータが詰め込まれているitemテーブルからランダムに4つだけ取得したい!ってなりまして(しかもpsqlを使用して)、そこでぐぐってみると幸運なことに解決方法が技術ブログ「BRAIN」に書いてありまして、さっそくコピペ&編集。

ざっとこんな感じになりました。

@items_hoge = @user.items.find(:all, :order => 'RANDOM()', :limit => 4)

これで理想とした処理ができたのですが、コードレビューしてくれている方から「そのやりかた、Rails4からは使えなくなるからさ、今後のことも見越してRails4でも動くようにしてよ。って言われてたんですね。コレは参った。どうやりゃーいいのさ!

 

さすがstackoverflowさん。なんでもあります。

ん〜とりあえずさっきの処理をRails4でも使えるようにするにはどうすりゃーいいのか考えて、それっぽい名称をぐぐってみた。いくつかワードを変えて試してみたところ「rails4 rails4 order random limit」ってところで当たりを引いた。stackoverflowに同じような問題か変えている外人さんがすでに質問していて、その回答を入手することに成功しました。

んでその解決方法はこちら

@items_hoge = @user.items.order("RANDOM()").limit(4)

 

シンプルイズベスト!

なんや簡単やん・・・これを機にちゃんとファインダーメソッド勉強しよう思いました。