在找到的Rails中,空数组为NULL

时间:2011-07-20 01:54:49

标签: ruby-on-rails arrays null where

我有以下简单的查找条件:

Player.where('id NOT IN (?)', @groups.collect {|g| g.player_ids}.flatten)

所以这会找到目前不在任何组中的所有玩家,对吧?好吧,问题是如果任何组中没有玩家,则不会显示任何内容。原因是生成了以下SQL:

SELECT "players".* FROM "players" WHERE (id NOT IN (NULL))

这对我来说似乎是一个奇怪的默认值,我在Rails 3.0.7和3.1.0.rc4中测试了它,结果相同。现在我可以创建一些条件,如果@ groups.collect {| g | g.player_ids}是空的,但是有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

我意识到这是一个老问题,Rails4现在有了where.not运算符,但对于那些仍然在Rails3上的人,我发现这比接受的答案更可口。我不相信它的Postgres,但我还没有在其他任何地方测试它。

ids = @groups.collect {|g| g.player_ids}.flatten)
Player.where('id not in (coalesce(?,0))', ids)

答案 1 :(得分:2)

你可能不喜欢这样,但是......

Player.where('id not in (select id from players where id in (?))', 
    @groups.collect {|g| g.player_ids}.flatten)

答案 2 :(得分:0)

@groups.collect {|g| g.player_ids}.flatten.join(',')