LoginSignup
0
0

More than 5 years have passed since last update.

LEFT JOINを利用して絞り込みを行う際、default_scopeを考慮したいならmergeで書く

Last updated at Posted at 2016-12-16

Author has many Comments という関連がある時に「commentsを持たないauthor」を得ようとしたらたぶんこう書くと思う。

Author.eager_load(:comments).where(comments: { id: nil })

しかしCommentdefault_scopeが設定されている場合、上記の書き方では無視されてしまう。

なのでmergeで書く

Author.eager_load(:comments).merge(Comment.where(id: nil))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

こう書くとCommentdefault_scopeがクエリに含まれる。

余談

  • eager_loadじゃなくてincludesじゃないの?」という人は以下を参照
  • そもそもdefault_scopeが微妙ではという話でもある
  • Rails5のleft_outer_joinsだとどうなってるんだろう?
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0