Damus
ruto profile picture
ruto
RailsでFooがbarsをhas_manyしているとき、

foo = Foo.build()
foo.bars.build()
foo.bars.to_a

としてもクエリは走らないが、

foo = Foo.build()
foo.bars.build()
foo.save!
foo.bars.to_a

とするとbarsがSELECTされる。

単純な場合はいいけど、Foo.includes(bars: :bazs}).find_or_initialize_by(...)みたいに大きな木を読み込みまたは作成して、子や孫も追加・更新して、その後別の関数で木全体を処理する、みたいなときに困る。