親または子レコードが存在しないレコードを抽出する方法


やりたいこと

Rails で、親または子レコードが存在しないレコードを抽出したいです。


使用するモデル

以下は、User と Blog が1対多であることを想定して記載しています。


子レコードが存在しない親レコードを抽出する方法

User モデルを起点に LEFT OUTER JOIN して、Blog モデルの id が nil のレコードを抽出すれば良いです。

コードにすると以下のようになります。

User.left_outer_joins(:blogs).merge(Blog.where(id: nil))


親レコードが存在しない子レコードを抽出する方法

Blog モデルを起点に LEFT OUTER JOIN して、User モデルの id が nil のレコードを抽出すれば良いです。

コードにすると以下のようになります。

Blog.left_outer_joins(:user).merge(User.where(id: nil))


環境


  • Rails 5.2.0