Rails4.2.3でDBのViewをeager_loadingするとViewのデータがnilになる

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でした。

# Viewのデータが取れるパターン
foo = Foo.find(1)
foo.bar_view # データある

# eager_loadするとnil
foo = Foo.eager_load(:bar_view).first
foo.bar_view # nil

Viewを使っている場合は要注意です。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です