使用WHERE IN和Rails预处理语句语法

Abr*_*m P 7 ruby sql prepared-statement ruby-on-rails-3 rails-activerecord

让我们说我有一个数组(从客户端收到)的ids:

myArray = [1,5,19,27]

我想返回(次要)ID在该列表中的所有项目.

在SQL中,这将是:

SELECT * FROM Items WHERE id IN (1,5,19,27)

我知道我能做到:

Item.where(id: [1,5,9,27]),

但是,将要添加的查询的时间越长,使用预准备语句语法 Item.where('myAttrib = ? AND myOtherAttrib <> ? AND myThirdAttrib = ?', myVal[0], myVa[1], myVal[2])

考虑到这一点,我想要的是以下内容:

Item.where('id IN ?', myArray)

但是,这会产生语法错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR: syntax error at or near "1" LINE 1: SELECT "items".* FROM "items" WHERE (id in 1,2,3,4)

我该如何解决这个问题?使用IN表达式的预准备语句语法的正确方法是什么.

Abr*_*m P 12

我最终使用:

Item.where('id IN (?)', myArray)


mcf*_*gan 3

您需要将查询更改为以下内容:

Item.where('id = ?', myArray)
Run Code Online (Sandbox Code Playgroud)

如果 myArray 实际上是一个数组,那么 ActiveRecord 会将其转换为 IN 子句。

  • 我很确定情况不再是这样(在 Rails 5 中)。这似乎产生了与 OP 中描述的相同的问题,您能提供一个工作示例吗?我可能错过了一些东西。 (2认同)