2012-05-30 3 views
0

이벤트 모달이 있는데 scheduled_time이라는 datetime 필드가 있습니다. 특정 형식 ('mon', 'tue'등)을 키로 사용하여 해당 날짜에 발생하는 이벤트의 수를 값으로 갖는 해시를 만들어야합니다. 어떻게해야합니까?이러한 개체를 해시로 그룹화하려면 어떻게해야합니까?

{ 
    'mon' => 2, 
    'tue' => 4, 
    'wed' => 3, 
    'thu' => 5, 
    'fri' => 12, 
    'sat' => 11, 
    'sun' => 7, 
} 

나는 레일 3.2.0와 루비를 사용하고 1.9.2

답변

0

가장 쉬운은 :group 옵션 count을 사용하는 것입니다 :

h = Model.count(:group => %q{to_char(scheduled_time, 'dy')}) 

특정 기능 당신이 좋겠 GROUP BY는 일반적으로 데이터베이스에 의존합니다. to_char 접근 방식은 위, PostgreSQL을 함께 작동 할 MySQL과 당신은 date_formatlower가 사용할 수 있습니다

h = Model.count(:group => %q{lower(date_format(scheduled_time, '%a'))}) 

SQLite는 당신은 아마 %w 형식 strftime을 사용하십시오 다음 손으로 문자열로 숫자를 변환합니다.

Model.count(:group => ...)을 사용하면 해시에 구멍이 생길 수 있습니다. 즉, 해당 날의 테이블에 항목이없는 경우 해시에 키가 없습니다.

h = { 'mon' => 0, 'tue' => 0, ... } 

을 한 다음에 count 결과를 병합 : 당신이 정말로 7 개 개의 열쇠 모든 시간을 원하는 경우에 제로 해시를 생성

h.merge!(Model.count(:group => ...)) 
관련 문제