2012-06-25 3 views
1

내가 예를 들어, 각 레코드의 양 속성을 정상화 그래서 몇 가지 계산을 할 수있는 그룹에 액티브 레코드에서 일련의 레코드를하려고 해요에서 총 :그룹화, 레일 및 액티브 레코드

은 사용자가 날짜를 입력 및 수량. 날짜는 고유하지 않으므로 날짜별로 10-20 개의 수량이있을 수 있습니다. 모든 개인 기록이 아닌 매일 합계로 작업해야합니다.

def heat_map(project, word_count, n_div) 
    return "freezing" if word_count == 0 
    words = project.words 
    counts = words.map(&:quantity) 
    max = counts.max 
    min = counts.min 
    return "max" if word_count == max 
    return "min" if word_count == min 
    break_point = (max - min).to_f/n_div.to_f 
    heat_index = (((word_count - min).to_f)/break_point).to_i 
end 

이 경우 잘 작동 : 다음 있기 때문에, 최고 및 최저 값을 결정한 후, 나는 기본적으로 보통 인 n로 나누어 각각의 변환 (10)

이것은 내가 지금 뭘하는지입니다 모든 단어 수의 표를 표시하지만, 매일 열리는 총계를 표시하는 달력에 히트 맵을 적용하려고합니다. 이것은 분명히 일을 합계하지 않습니다, 그래서 나는 정상적인 규모 밖의 숫자로 끝납니다.

정규화를하기 전에 단어 수를 그룹화하고 합계하여 계산하는 방법을 알아낼 수 없습니다. group_by를 수행하고 맵 호출을 추가하려고 시도했지만 정의되지 않은 메소드 오류가 발생했습니다. 어떤 아이디어? 나는 또한 단어 수를 표준화하는 더 좋고/더 깨끗한 방법에 대해서도 열려있다.

답변

0

모델에 대해 조금 더 알지 못해도 대답하기가 어렵습니다. 그래서 당신이 관심있는 날짜가 words 테이블의 created_at 날짜라고 가정합니다. 나는 당신이 words 테이블에 실제 단어를 저장하는 word이라는 필드를 가지고 있다고 가정하고 있습니다.

나는 또한 하루에 같은 단어 (다른 수량 일 수도 있음)에 대해 여러 항목이있을 수 있다고 가정합니다. 그 추측은 아무런 의미가없는 경우,

project.words.group('DATE(created_at)').group('word').sum('quantity') 

아마도 당신은 당신의 모델의 구조에 대해 좀 더 자세히를 제공 할 수 있습니다 :

그래서, 이것은 당신에게 하루에 단어의 개수의 정렬 된 해시를 제공 할 것입니다.