2012-10-01 3 views
0

상업용 주별로 전화를 받으려고합니다. 이것은 정확한 데이터와 객체 만 반복 여러 차례의 컬렉션을 반환 Rails - 날짜 별 그룹화 및 카운트를 사용하는 쿼리

calls_by_week = Call.select("strftime('%W',date_time_origination) as week, count(*) as total_number_of_calls").group("week") 

(JSON :

select strftime('%W', date_time_origination) as week, count(*) 
from calls 
group by week; 

그때 먼저이를 사용하여 레일이를 실행하려고 : 나는 SQL을 작성했습니다 표현) :

:

[{ "total_number_of_calls": 5435, "week": 39 },.....] 

그것은 하나 개의 객체를 반환해야 감안할 때, 나는 레일 쿼리의 구조를 변경 시도

calls_by_week = Call.select("strftime('%W', date_time_origination) as week").group("strftime('%W', date_time_origination)").count 

이 시간, 쿼리가 하나의 해시 뺀 명명 된 PARAMS을 반환

{ "31": 3123, "32": 1231,... } 

나는 다음과 같이 제시 JSON에서 데이터를 가지고 싶습니다

{ "week": 31, "total_number_of_calls": 12412,.....} 

가되어 거기에 첫 번째 쿼리에 의해 생성 된 중복을 제거하는 방법?

답변

0

첫 번째 : Call.select(...) 레일을 사용하는 경우 Call 개체를 설치하려고합니다. 당신이 원하는 것은 Call 개체가 아니라 그냥 해시입니다. Call.connection.execute("SELECT .... blah blah").to_enum.to_a을 사용하고 배열의 결과 배열을 사용할 수 있습니다. 양식을 해시

returned_hash = { "31": 3123, "32": 1231,... } 
what_you_want = returned_hash.collect do |k,v| 
    {"week" => k.to_i, "total_number_of_calls" => v.to_i} 
end 

또 다른 방법을 사용하여 결과를 변환 할 수 있지만

은 여전히 ​​Call 객체를 구축 할 것입니다 쿼리에 적용 .uniq을 사용하는 것입니다, 그러나 적어도 그들은 데이터를 반복하지 않습니다.