Rails和Active Record中的分组,总计

时间:2012-06-25 23:11:39

标签: ruby-on-rails-3 activerecord normalization

我正在尝试在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调用,但是我收到一个错误,一个未定义的方法错误。有任何想法吗?我也愿意采用更好/更清洁的方法来规范字数。

1 个答案:

答案 0 :(得分:0)

如果不了解您的模型,很难回答。所以我假设您感兴趣的日期只是created_at表中的words日期。我假设您的words表格中有一个名为word的字段,您可以在其中存储实际字词。

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

因此,这将为您提供每日字数的有序哈希:

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

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