Active Record不存在连接表记录的情况

我试图获取连接表中不存在的所有记录的列表。

模型是User,Game和MarkedGame,用户可以将游戏标记为已播放。 这是一个多对多的关系:

User > MarkedGame < Game 

我想要的是所有未被用户标记的游戏列表。

我知道我可以做两个单独的查询并减去它们:

 Game.all - current_user.games 

但我不喜欢这给我留下一个数组而不是一个Active Record关系对象。 此外,似乎应该有一种更高效的方式。

如果没有Active Record处理这个方法,是否有SQL方式? 我的原始SQL不是特别强大,所以任何帮助都会受到赞赏。

谢谢。

应该这样做。 返回尚未由当前用户标记的所有游戏。

 Game.where('id not in (select game_id from marked_games where user_id = ?)', current_user.id) 

您可以尝试以下方法:

 Game.where.not(id: MarkedGame.where(user_id: current_user.id).pluck(:game_id))