結論
ActiveRecordのmissingという関数を使えばこんなにエレガントになります。
# missingなし
Master.left_joins(:datas).where(datas: {id: nil})
# missingあり
Master.where.missing(:datas)
どういうこと?
missingは関連が無いデータを取得するときに使います。例えば
- 利用されていないマスターデータの一覧を取得する(上例)
- 所属する社員がいない部署の一覧を取得する(ex:
部署.where.missing(:社員)
) - 画像が無い記事の一覧を取得する(ex:
記事.where.missing(:画像)
)
どうやって利用するの?
has_one/has_many/belogs_toなどのアソシエーションが組んであれば利用できます。
なにはともあれ、missingって響きがカッコいいので多用したい。
参考