以下是您需要考虑的一些关系:
- User has one profile
- Profile belongs to user
- User has many favourites
我有一些用户ID,我想获取用户最喜欢的个人资料。
尝试了很多不同的查询,我的头开始旋转,这里有一些:
Profile.select('profiles.id')
.joins("INNER JOIN users ON profiles.user_id = users.id INNER JOIN favourites
ON favourites.user_id = users.id")
.where("users.id in (?)", some_ids)
我将线条分开以便于阅读。
使用此查询无论我的用户是否已收到我的用户,我仍然会收到这些个人资料。
如果我拿出副本,这个结果会得到相同的结果:
Profile.joins(user: [:favourites]).where('users.id in (?) and favourites.user_id is not null', some_ids)
我将如何做到这一点?
答案 0 :(得分:0)
Profile.select('profiles.id')
.joins(:favourites)
.joins("LEFT JOIN users ON profiles.user_id = users.id AND favourites.user_id = users.id")
.where("users.id in (?)", some_ids)