0

今天早上我切换到 postgresql,现在我的 where 选择不再起作用了。

我想做的是超级简单:

shirt_ids = "1,5,6" # String generated by javascript
Shirt.where("id in (?)", shirt_ids)

这给了我:

PG::Error: ERROR:  invalid input syntax for integer: "1,5,6"
LINE 1: SELECT "shirts".* FROM "shirts"  WHERE (id in ('1,5,6'))

这虽然有效:

Shirt.where("id in (#{shirt_ids})")

但众所周知,这是不安全的。

我正在使用:

pg (0.13.2 x86-mingw32)
rails (3.2.2)

postgresql 数据库是最新版本,我今天早上安装的。

感谢您的帮助。^

4

1 回答 1

6

我相信 Postgres 期待一个数组,而不是 IN 函数的字符串。如果将字符串转换为数组,它应该可以工作:

shirt_ids = "1,5,6"
Shirt.where('id in (?)', shirt_ids.split(','))

此外,您可以这样做,看起来更干净:

Shirt.where(:id => shirt_ids.split(','))
于 2012-05-07T04:49:11.660 回答