从一个表中获取不在第二个表的任一列中的所有记录

时间:2014-12-08 06:56:22

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有播放器模型和匹配模型。每个匹配都有一个wins_id和一个loser_id,用于输入播放器

如何让所有从未参加比赛的球员获得胜利?

即。得到所有玩家ID,既不是winner_id也不是loser_id列。

我正在使用Rails 4。

Players
-------------
id    
1 
2
3
4
5
6
7

Matches
-------------
winner_id     loser_id
1             2
1             3
1             4

所以结果应该是玩家5,6和7。

2 个答案:

答案 0 :(得分:1)

Player.where.not(id:Match.pluck(:winner_id,:loser_id).flatten.uniq)

答案 1 :(得分:0)

也可能有更好的方法。但你也可以这样做:

ids = Matche.select(:winner_id).distinct.map{|match| match.winner_id} + Matche.select(:loser_id).distinct.map{|match| match.loser_id}
@players = Player.where.not(id: ids)