Rails4.2.1のときにRspecを実行したら通っていたテストが、Rails4.2.3にアップデートしたら急に落ち始めました。
落ちているテストの共通点は、
『(DBの)Viewを使っている』
という点でした。
Elasticsearchにデータをインポートした際に、データが抜けていたので、as_indexed_jsonをしたタイミングでデータが抜け落ちてるのかなと思って、pryを使いながら該当メソッドをコールしたりしていたのですが、データは存在していたため、訳がわからなかったのでした。Viewは使えてるわけです。
そこでRailsの変更履歴を見ていたら、eager_loadのN+1問題の不具合を修正したよっていうやつが。
https://github.com/rails/rails/pull/18765
もしやと思って、Viewをeager_loadした後にViewにアクセスしたら、確かにnilでした。
1 2 3 4 5 6 7 | # Viewのデータが取れるパターン foo = Foo.find( 1 ) foo.bar_view # データある # eager_loadするとnil foo = Foo.eager_load( :bar_view ).first foo.bar_view # nil |
Viewを使っている場合は要注意です。