我有一个大约100个用户的表,我也有一个用户ID数组。我想要做的是显示所有不属于此用户标识数组一部分的用户。当我做这样的事情时检索具有空阵列的记录时出现问题
User.where('id NOT IN (?)', [9, 2, 3, 4])
它成功地返回用户的ID不属于该数组的记录。然而,如果数组是空的,像这样
User.where('id NOT IN (?)', [])
它不返回任何用户背部和SQL查询看起来像这样
SELECT "users".* FROM "users" WHERE (id NOT IN (NULL))
有谁知道为什么发生这种情况或可能这是一个错误?我正在使用Rails 3.2.5和PostgreSQL。
这看起来像一个Rails问题,或者可能是'Pg'宝石的问题;它将空数组视为NULL。非常奇怪 - 而且行为不好。你可以直接用'Pg' gem来测试一个准备好的语句,看它是否以这种方式处理数组参数,或者它是否是Rails/ActiveRecord级别的呢? –
@CraigRinger:这将是一个Rails/ActiveRecord问题,而不是“pg”问题。 AR处理占位符本身。 –
@CraigRinger:有时候,AR人员在SQL方面令人惊讶,他们故意这样做。在这里插入“儿子,我很失望”的形象。 –