1

我正在尝试对 Active Record 中的一系列记录进行分组,以便我可以进行一些计算来规范化每条记录的数量属性,例如:

用户输入日期和数量。日期不是唯一的,所以每个日期我可能有 10 - 20 个数量。我只需要处理每天的总数,而不是每条记录。因为然后,在确定了最高和最低值之后,我基本上通过除以n通常为 10 来转换每个值。

这就是我现在正在做的事情:

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

如果我显示所有字数的表格,这非常有用,但我试图将热图应用到显示每天运行总数的日历。这显然不包括天数,所以我最终得到的数字超出了正常范围。

在我进行规范化之前,我想不出一种方法来对字数进行分组并按天计算它们。我尝试做一个 group_by 然后添加 map 调用,但我得到一个未定义方法错误的错误。有任何想法吗?我也愿意接受更好/更清洁的字数标准化方法。

4

1 回答 1

0

在不了解您的模型的情况下很难回答。所以我将假设您感兴趣的日期只是表格created_at中的日期。words我假设您的words表中有一个字段,称为word存储实际单词的位置。

我还假设您在一天内可能有多个相同单词的条目(可能具有不同的数量)。

因此,这将为您提供每天单词计数的有序散列:

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

如果这些猜测没有意义,那么也许您可以提供有关模型结构的更多细节。

于 2012-06-26T07:07:06.197 回答