2012-05-07 2 views
0

오늘 아침에 저는 postgresql로 전환했고 이제는 더 이상 작동하지 않습니다.Postgresql WHERE 절이 ''주위에 추가됩니까?

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

하지만 이것은 작동합니다 :

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

이 나에게 제공합니다

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

그러나 모두가 알고있는 것처럼 안전하지 내가 뭘하려고 오전

슈퍼 간단합니다.

임 사용 :

pg (0.13.2 x86-mingw32) 
rails (3.2.2) 

PostgreSQL 데이터베이스가 최신 버전입니다, 오늘 아침에 그것을 설치.

도움 주셔서 감사합니다. ^

답변

6

나는 Postgres가 IN 함수를위한 문자열이 아니라 배열을 기대하고 있다고 생각한다. 당신이 배열로 문자열을 변환하면 작동한다 : 또한

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

, 당신은 조금 청소기 보이는,이 작업을 수행 할 수 있습니다

Shirt.where(:id => shirt_ids.split(',')) 
+0

은 아마 당신의 빠른 도움말 : – KimJongIl

+0

주셔서 감사를 조금 빨리 ... 나는 원래의 대답은 '작동'하지만 실제로는 하나의 객체 만 반환한다는 것을 깨달았다. 그에 따라 편집,이 하나는 잘되어야합니다. – MrTheWalrus

+2

보다 정확하게 ActiveRecord는 SQL 스 니펫에'?'를, 값으로 String을보고, 그 Ruby String을 SQL 문자열 리터럴''1,2,3 ''로 변환합니다. 나는'shirt_ids.split (','). map (& : to_i)'이 더 안전하다고 생각한다. –

관련 문제