0

今朝私はpostgresqlに切り替えました、そして今私のwhereselectsはもう機能しません。

私がやろうとしていることはとても簡単です:

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 に答える