実装方法
SQLのLEFT OUTER JOIN
のON
の条件にIN句
を書ければいいのですが、Railsではそれが出来ないようでした。
Railsで同様のことをやるには、以下のようにWHERE
のIN句
の条件にnil
を追加します。
# ユーザ別の最新のUserLocationのidを取得
latest_user_location_ids = UserLocation.group(:user_id).maximum(:id).values
users = User.
includes(:user_locations).
# IN句の条件にnilを含めないと、inner joinと同じ結果になってしまう
where(user_location: { id: latest_user_location_ids.push(nil) }