2013-05-21 2 views
0

도시 이름과 도시 이름이있는 도시 모델이 있습니다. 다양한 순위로 도시를 표시하는 방법은 무엇입니까?레일 - 순위에 따라 레코드를 얻는 방법

예를 들어, 순위의 하이 엔드에 대한 메소드와 로우 엔드에 대한 메소드에 두 개의 숫자를 전달할 수 있습니다. 즉 get_cities_by_pop (1,10)은 인구 기준으로 상위 10 개 도시를 얻는 반면 get_cities_by_pop (20,35)는 인구 기준으로 20-35 위를 차지합니다.

def get_cities_by_pop(high, low) 
    cities = City.all.order('population DESC') 
end 

하지만이 논리를 작성하는 방법을 잘 모르겠습니다 :

지금까지 난 그냥 있습니다.

답변

3

ActiveRecord querying guide page에서 필요한 모든 것을 갖추고 있습니다.

당신은 레코드 수를 지정하는 데 제한을 사용할 수는 , 검색 수와 레코드를 반환하기 시작 전에 건너 뛸 레코드의 수를 지정 오프셋 사용합니다. 예를 들어

Client.limit(5) 

5 개 클라이언트 최대 반환하고 아니오 오프셋 지정 있기 때문에 테이블의 제 5 리턴한다. 그것을 실행하는 SQL은 다음과 같이 보이는 :

SELECT * FROM clients LIMIT 5 

대신 31로 시작하는 5 클라이언트의 최대가 반환

Client.limit(5).offset(30) 

오프셋 추가.

SELECT * FROM clients LIMIT 5 OFFSET 30 
이 경우

는, 최종 결과는 같을 것이다 :

Client.order('population DESC').offset(high-1).limit(low) 
+1

을 고려해 볼 수 있습니다처럼 는 SQL 본다 최종 결과는 다음과 같습니다 :'Client.order ('population DESC'). offset (high-1) .limit (low)' – PinnyM

+0

고마워요! 나는 그게 이처럼 단순 할 줄 알았어. – Zephyr4434

+0

@PinnyM 감사합니다. 답변에 추가했습니다. – oldergod

0

당신은이 경우이뿐만 아니라

def get_cities_by_pop(high, low) 
    City.where(population >= ? AND population <= ?, low, high).order('population DESC') 
end 
관련 문제