정렬

2011-09-19 3 views
0

내 테이블 모델이정렬

모델처럼 보이는 NiceFile

다음
name:string 
file_type:integer 

내가 가진 나는이 사전 주문한 레코드를 정렬 할 수 있습니까

{1=>'aaa', 2=>'bbb', 3=>'ccc'} 

같은 사전?

ordering = {1=>'aaa', 2=>'bbb', 3=>'ccc'} 
files = NiceFile.where(...).sort_by { |n| ordering[n.file_type] } 

where(...)은 물론, 단지 자리 당신이 당신의 nicefiles는을 얻기 위해해야 ​​할 어떤 AR 것들에 대한 : 루비으로 정렬하고 싶다면

+0

당신의 해시에있는 키는'file_type' 값을 의미합니까? 그리고 데이터베이스 내부 또는 데이터베이스 외부에서 정렬 작업을 수행하려고합니까? –

+0

예, 키는 file_type입니다. 나는 간단한 해결책을 좋아한다. – blyp

+0

사전으로 주문하지 않은 것들 - 키 또는 값으로 주문 하시겠습니까? –

답변

0

은, 당신이 뭔가를 할 수 있습니다. 이 작업은 데이터베이스 작업이 순서를 신경 쓰지 않는 한 올바르게 작동합니다. 실제로 이것은 limitoffset을 사용하여 데이터베이스 결과를 캡처 할 계획이 아니라면 일반적으로 괜찮을 것입니다.

데이터베이스 내에서 맞춤 주문을 사용해야하는 경우 해시를 표 (예 : ordering_table)에 넣고 가입 한 다음 값을 주문하려고합니다. 이런 식으로 뭔가 :

files = NiceFile.where(...). 
       joins('left join ordering_table on nice_file.file_type = ordering_table.file_type'). 
       order('coalesce(nice_file.order_pos, 1000)'). 
       limit(11) 

coalesceleft join는 경우가있다 당신은 당신의 ordering_table에없는 nice_file.file_type 값이 있습니다.