Ruby

Active Record の :include オプション

またまたN+1問題ネタです。前回の記事で、N+1問題を回避するのにJOIN SQLを使うと、返されるオブジェクトの構造がイケていないということを書きました。 自分で、オブジェクトモデルをつくってみたわけですが、ちゃんとしたやり方がありました。多くのO-Rマ…

特異クラスの使い方

前の記事の最後に出したコードで特異クラスを使ってます。 def build_book books = Book.joins('LEFT JOIN reviews ON books.id = reviews.book_id'). select('books.id bid, reviews.id rid, reviews.book_id, reviews.body') res = {} books.each { |rec| …

Active Record で N+1 問題

最近会社でHibernateのN+1問題事例を調べてたんですが、ActiveRecordでも当然のように起こりますね。BOOKSテーブルが、1対NでREVIEWSテーブルと関連を持っています。(BOOKSが1、REVEWSがN)以下のコードでは、BOOKSテーブルを全件検索して、それに関連するR…

require

Rubyプロセス上で一度requireされたものは、そのあとはrequireしなくてもよいんですね。へえ。 require './hoge.rb' require './sage.rb' hoge = Hoge.new hoge.execute sage = Sage.new sage.execute Sageの中で改めてHogeをrequireしなくても呼び出せます…