2014-05-22 4 views
0

사용자 테이블에 id (정수)가 있고 arel을 사용하여 SQL 쿼리를 작성하면이 결과를 얻습니다.Rails의 정수 속성에 대해 일치 쿼리를 수행하는 방법

users = Arel::Table.new(:users) 
users.where(users[:id].matches("foo")).to_sql #=> "SELECT FROM `users` WHERE `users`.`id` LIKE 0" 

나는이 SQL 대신 생성해야합니다

"SELECT FROM `users` WHERE `users`.`id` LIKE 'foo'" 

나는 후드 원치 않는 타입 캐스팅 장소의 어떤 종류의 거기 느낌이있다.

업데이트 :

는 드디어 Arel :: 노드 :: SqlLiteral 클래스의 인스턴스를 사용하여이 문제를 해결했다.

str = Arel::Nodes::SqlLiteral.new("'foo'") 
users.where(users[:id].matches(str)).to_sql #=> "SELECT FROM `users` WHERE `users`.`id` LIKE 'foo'" 

답변

0

INT 유형 열에서 쿼리를 작성하려고하기 때문입니다. 따라서 레일스는 'foo'를 Integer으로 변환하려고합니다. 0입니다.

컬럼의 올바른 데이터 유형에 대한 기대 쿼리를 생성합니다 다음은

users.where(users[:name].matches("foo")).to_sql #=> "SELECT FROM `users` WHERE `users`.`name` LIKE 'foo'" 

따라서, 귀하의 경우, 당신은 이런 식으로 뭔가를 시도해야합니다 :

users.where(users[:id].matches(1)).to_sql #=> "SELECT FROM `users` WHERE `users`.`id` LIKE 1" 

을 나는 희망이 도움이 .