2011-09-09 2 views
0

모든 레일스 ActiveRecord가 새로운 쿼리 인터페이스로 마이그레이션하는 동안 문제가 발생했습니다. 대부분은 단순하지만이 것은 더 복잡합니다.레일 3 쿼리 인터페이스 - 고급 주문

우리는 데이터베이스에서 특정 수의 프로젝트를 나열했지만 결과를 내림차순, 오름차순이 아닌 특정 순서로 반환하고자하는 문제에 직면했습니다. 이를위한 오래된 해결책은 그렇게합니다.

ids = [2,19,1,11,22] 
Project.find(:all, :conditions => {:id => ids}, :order => "FIELD(id,#{ids.join(',')})") 

순서가 맞춰지기 때문에 새로운 쿼리 인터페이스를 사용해보십시오.

Project.where(:id => ids).order("FIELD(id,#{ids.join(',')})") 

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC,1018 DESC,1017) DESC LIMIT 1' at line 1: SELECT `projects`.* FROM `projects` WHERE (`projects`.`id` IN (1018, 1017)) ORDER BY FIELD(id DESC,1018 DESC,1017) DESC LIMIT 1 

'순서'는 문자열을 사용하며 항상 필드 이름 또는 필드 이름 목록으로 가정합니다.

누구나이 방법을 알고 있습니까? 많은 감사합니다. (SQL 삽입을)

RobL는

답변

0

는 배열 순수한 정수로 구성된이 망할 확인 후 작업을해야 다음과 같습니다.

join_ids = ids.join(',') 
Project.find_by_sql ["SELECT * FROM projects WHERE id IN [?] ORDER BY FIELD(id,?);",join_ids,join_ids] 

아이디어가 있습니다. 아니 꽤.