2014-10-14 3 views
2

내가 유형은 첫째 여우 원숭이 모든 결과를 반환 한 후 임의의 순서로 결과의 나머지를 반환 할 우리가일치하는 결과를 ActiveRecord에서 반환 한 다음 나머지를 반환하는 방법은 무엇입니까?

< id: 1, name: "Bill", type: "Lemur" > 
< id: 2, name: "Bob", type: "Cow" > 
< id: 3, name: "Nancy", type: "Lemur" > 
< id: 4, name: "Jack", type: "Seagull" > 
< id: 5, name: "Jill", type: "Seagull" > 
< id: 6, name: "Jake", type: "Cow" > 
< id: 7, name: "Jess", type: "Lemur" > 
< id: 8, name: "Nick", type: "Lemur" > 
< id: 9, name: "Jacky", type: "Cow" > 
< id: 10, name: "Jerry", type: "Cow" > 
< id: 11, name: "Samuel", type: "Seagull" > 
< id: 12, name: "Tessa", type: "Lemur" > 

같은 데이터를 말한다. ActiveRecord의 그룹 메서드를 사용할 수 있다고 생각했지만 올바르게 이해했다고 생각하지 않으며 다른 작업을 수행하고 있습니다. 나는 다른 스택 오버플로 대답을보고 난 후에 Animal.order('Field(type, "Lemur")')을 시도했지만 그 중 하나도 작동하지 않았다. 나는 이것을 카미나리에게 넘겨서 페이지 매김을하기 때문에 반환 된 관계가 필요합니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

일을 더 복잡하게 만들려면 실제로 hstore 열에서이 작업을 수행하고 싶지만 먼저 일반적인 대답을 찾아야합니다.

이것은 Rails 3.2에서 Postgres 9.3을 사용하고 있습니다.

+0

당신은 선택할 수 후 어디에 유형 선택 :이 게시물에 제안으로

Animal.order("type!='Lemur', type!='Cow', type!='Seagull'") 

! 예처럼, "쾅 여우 원숭이와 동등하지 않습니다. 결과 배열을 다시 결합하십시오. – kobaltz

+0

@ kobaltz 감사합니다. 당신은 내가 관계를 되찾도록 지정해야한다고 상기 시켰습니다. – Rumel

+0

이 쿼리가 도움이 되었기를 바랍니다. http://stackoverflow.com/a/6332081/1297435 –

답변

1

GROUP BY 절을 통해이 작업을 수행 할 수 있을지 의심 스럽습니다.

Lemur.all.concat Animal.all.reject{ | a | a.type == 'Lemur' } 

편집 : 당신은 배열과 잘 경우 그 방법은 일 내가 생각할 수있는 모든 비트 unelegant 할 수있는이입니다. 다음은 ActiveRecord :: Relation (레일 4는 where.not(condition)에 필요)을 사용하여 수행하는 방법입니다.

편집 : Ooops, 후자는 또한 배열을 반환합니다.

Animal.order("CASE animals.type WHEN 'Seagull' THEN 'a' ELSE 'z' END ASC, animals.name ASC") 

이 쿼리 유형 '갈매기'의 모든 동물을두고 첫째, 그 동물의 이름을 기준으로 나머지를 주문 :

2

그것을 할 수있는 SQL의 방법이있다. 기본 switch case

감사합니다) 포스트 그레스가 없기 때문에 MySQL이하는 것처럼