2010-07-01 3 views
6

난과 검색에 사용하고 쿼리가이 같은 조건 :레일즈 SQL 쿼리와 % 와일드 카드는 SQLite에서 작동하지만 PostgreSQL에서는 작동하지 않습니까?

:conditions => ['family_name LIKE ? OR given_name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%"] 

내가 PostgreSQL을에 Heroku가 모두에 대한 첫 번째 % 작품을 누르면 쿼리 SQLite는 로컬 잘 작동하지만 family_name 및 given_name. 즉 단어의 끝에 있지만 시작이나 중간에는없는 키워드와 일치합니다.

예 :이 레코드를 검색합니다 "ington"또는 "RGE"에 대한 GIVEN_NAME => "조지"

수색 : FAMILY_NAME => "워싱턴"과 : 의 기존 기록이 있습니다. "Wash"또는 "Geo"를 검색하면 검색되지 않습니다.

나는 새로운 사용자이고 레일을 처음 사용하는 사람입니다. 귀하의 도움에 미리 감사드립니다.


솔루션

관련 스레드 : 1 2

여기에 내가 사용하고있는 수정의 :

:conditions => ['LOWER(family_name) LIKE ? OR LOWER(given_name) LIKE ?', "%#{params[:search].downcase}%", "%#{params[:search].downcase}%"] 

답변

11

LIKE는 포스트 그레스에서 대소 문자를 구분하는 연산자입니다. 대소 문자를 구분하지 않는 패턴 매칭의 경우 ILIKE 또는 other standard methods을 사용하십시오.

+0

대문자와 소문자를 구별하는 질문은 결코 내 마음을 초월하지 않았습니다. 정말 고마워. 두 가지 유형의 데이터베이스와 호환되기 때문에 모든 것이 소문자로 설정되었습니다. 편집 : 질문에 최종 코드가 추가되었습니다. – studiofellow

관련 문제