0

いくつかの助けを借りて、プロジェクト内の各日の単語カウントを表示し、それをほぼ 1 つのデータベース クエリに減らす方法を採用することができました。これが方法です

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 でのデータベース ヒットの削減

ただし、ユーザーが毎日単語カウントを入力する方法を変更したいと考えています。ただし、1 日に 1 つだけではなく、1 日に複数のカウントを入力できるようにしたいと考えています。ただし、このメソッドは、入力された最後の日の単語数のみを返します。その特定の日のすべての単語数ではありません。

index_by を group_by に変更してみましたが、 の未定義メソッド エラーが発生しましたquantity。それで、私の質問は...たとえば、2012 年 5 月 4 日のように 2 つのオブジェクトがある場合、同じ日に複数のエントリを処理するにはどうすればwrote_onよいですか?

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 に答える