9

groupdate と chartkick を使用して、時間の経過に伴うユーザー ベースの成長 (および減少) を示すグラフを表示しようとしています。

以下を使用すると、縦棒グラフでは問題なく動作しますが、折れ線グラフではうまくいきません。

sum=0
User.group_by_day(:created_at).count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge)

誰かが私を正しい方向に向けることができますか? または、これを機能させるためのより良い方法はありますか?

4

3 に答える 3

11

これは、累積合計を行う前に並べ替える必要があるためです。

これを試して:

sum=0
User.group_by_day(:created_at).count.to_a.sort{|x,y| x[0] <=> y[0]}.map { |x,y| { x => (sum += y)} }.reduce({}, :merge)
于 2013-06-03T20:46:27.437 に答える
11

マーティンの答えは近かったが、私は最終的に以下を使用した:

User.group_by_week(:created_at).order("week asc").count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge)

毎週取得するには-順序(「週の昇順」)に注意してください-それが修正されたものです...

于 2013-06-06T10:50:19.503 に答える
0

I used this:

one-liner:

User.group_by_day(:created_at).count.each_with_object({}) { |acc, (key, value)| acc[key] = ((acc.values.last || 0) + value); acc }

prettified with prettier's ruby plugin:

User
  .group_by_day(:created_at)
  .count
  .each_with_object({}) do |acc, (key, value)|
    acc[key] = ((acc.values.last || 0) + value)
  end
于 2021-01-19T23:05:37.310 に答える