当数组为空时,IN()在Postgres中引发错误

时间:2016-10-20 16:18:26

标签: postgresql ruby-on-rails-4

此行之前适用于SQlite。但是现在我已经切换到postgreSQL,如果数组为空,它会引发异常。

visit(unit) {
  case (ClassDecl) `class <Identifier name> { <ClassBodyDeclaration* body> }` : {
     ... 
  }
}

什么是最有效的方式来改写这个以便PostgreSQL会很开心?当InstagramMedia.where(instagram_account: [self.instagram_accounts.ids]) 为空时

由于

EDIT 错误是:

self.instagram_accounts.ids

它仅在数组为空时出现

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的Rails和Postgres?

将空数组传递到#where不应该引发错误:

(Rails 4.2.6 and Postgres 9.4)
>> User.where(id: [])
>> User Load (0.5ms)  SELECT "users".* FROM "users" WHERE  1=0
[]

看起来你的self.instagram_accounts.ids可能正在返回一个数组,这意味着你正在传递一个嵌套数组。此功能在4.2中已弃用,但我认为在5.0中已删除。这可能是您错误的来源吗?

  

WARN DEPRECATION警告:将嵌套数组传递给Active Record   finder方法已弃用,将被删除。展平您的阵列   在将其用于'IN'条件之前。

如果不是这样,你可以发布整个错误吗?