2017-10-31 4 views
1

우선 순위 (오름차순)에 따라 데이터를 정렬합니다. 우선 순위 지정에서 '0'이 무시됩니다. 레일 : 0을 제외한 숫자로 레코드 정렬 쿼리

[0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7] 

당신이 저를 주문하는 방법을 알아내는 데 도움이 수

Profile.where(active: true).order(:priority).pluck(:priority) 

이 쿼리는 '0'

에서 시작 우선 순위 레코드의 정렬 된 목록을 반환 아래

은 레일 쿼리입니다 아래 예제에 따라 쿼리에서 "0"이있는 레코드가 마지막에 추가 된 데이터입니다. 당신이 말할 수 있도록

Example: [1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 7, 0] 

답변

2

당신은 원시 SQL을 사용하는 #order 문자열을 전달할 수 있습니다

Profile.where(active: true) 
     .order('case priority when 0 then 1 else -1 end, priority') 
     .pluck(:priority) 

는 마지막에 우선 순위를 제로 항목을 강제로. 숫자가 1이고 -1을 사용할 필요가 없으며 올바른 순서로 읽을 수있는 문자열을 사용할 수 있습니다. 물론 문자열을 사용할 수도 있습니다 (물론 올바르게 정렬한다고 가정).

.order("case priority when 0 then 'last' else 'first' end, priority")