0

在一些帮助下,我能够采用一种方法来显示项目中每天的字数,并将其减少到几乎一个数据库查询。这是方法

def project_range(project, start, finish, &blk)
  words = project.words.where(:wrote_on => start..finish)
  word_map = words.index_by(&:wrote_on)
  for day in start..finish
    word_count = word_map[day] ? word_map[day].quantity : 0
    blk.call(day, word_count)
  end
end

原来的问题在这里:

减少 Rails 中的数据库命中

不过,现在我们想改变用户输入每天字数统计的方式——我们想让他们有机会在一天内输入多个字数,而不是每天只输入一个字数。但是,此方法仅返回输入的最后一天的字数,而不是该特定日期的所有字数。

我尝试将 index_by 更改为 group_by,但我得到了一个未定义的方法错误quantity。所以,我的问题是......我如何处理同一天的多个条目,其中有两个wrote_on对象,比如 2012 年 5 月 4 日?

4

1 回答 1

1

group_by与另一个修改一起工作。更改被注释掉。

def project_range(project, start, finish, &blk)
    words = project.words.where(:wrote_on => start..finish)
    #word_map = words.index_by(&:wrote_on)
    word_map = words.group_by(&:wrote_on)
    for day in start..finish
      #word_count = word_map[day] ? word_map[day].quantity : 0
      word_count = word_map[day] ? word_map[day].sum(&:quantity) : 0
      blk.call(day, word_count)
    end
  end
于 2012-05-05T16:37:24.977 回答