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))