不存在联接表记录的活动记录

Dan*_*tos 2 sql activerecord ruby-on-rails rails-activerecord

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

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

User > MarkedGame < Game
Run Code Online (Sandbox Code Playgroud)

我想是的,所有的游戏列表没有被打上了用户。

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

Game.all - current_user.games
Run Code Online (Sandbox Code Playgroud)

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

如果没有 Active Record 方法来处理这个问题,是否有 SQL 方法?我的原始 SQL 不是特别强大,因此将不胜感激。

谢谢。

pot*_*hin 7

您可以尝试以下操作:

Game.where.not(id: MarkedGame.where(user_id: current_user.id).pluck(:game_id))
Run Code Online (Sandbox Code Playgroud)