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表达式的预准备语句语法的正确方法是什么.
您需要将查询更改为以下内容:
Item.where('id = ?', myArray)
Run Code Online (Sandbox Code Playgroud)
如果 myArray 实际上是一个数组,那么 ActiveRecord 会将其转换为 IN 子句。