Author has many Comments
という関連がある時に「commentsを持たないauthor」を得ようとしたらたぶんこう書くと思う。
Author.eager_load(:comments).where(comments: { id: nil })
しかしComment
にdefault_scope
が設定されている場合、上記の書き方では無視されてしまう。
なのでmerge
で書く
Author.eager_load(:comments).merge(Comment.where(id: nil))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
こう書くとComment
のdefault_scope
がクエリに含まれる。
余談
- 「
eager_load
じゃなくてincludes
じゃないの?」という人は以下を参照 - そもそも
default_scope
が微妙ではという話でもある - Rails5の
left_outer_joins
だとどうなってるんだろう?