Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:使用groupdate&;chartkick创建累积用户图_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails:使用groupdate&;chartkick创建累积用户图

Ruby on rails Rails:使用groupdate&;chartkick创建累积用户图,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用groupdate和chartkick来尝试显示一个图表,显示用户群随时间的增长(和下降) 使用以下方法在柱状图中效果很好,但在折线图中效果不佳: sum=0 User.group_by_day(:created_at).count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge) 谁能给我指出正确的方向吗?还是有更好的方法来实现这一点?这是因为在进行累计和之前需要进行排序 试试这个: sum=0 User.group_by

我正在使用groupdate和chartkick来尝试显示一个图表,显示用户群随时间的增长(和下降)

使用以下方法在柱状图中效果很好,但在折线图中效果不佳:

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

谁能给我指出正确的方向吗?还是有更好的方法来实现这一点?

这是因为在进行累计和之前需要进行排序

试试这个:

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)
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)

马丁的答案很接近,但我最终使用了:

User.group_by_week(:created_at).order("week asc").count.map { |x,y| { x => (sum += y)} }.reduce({}, :merge)
要获取每周-请注意订单(“每周asc”)-这是解决问题的方法…

我使用了以下方法:

一艘班轮:

User.group_by_day(:created_at).count.each_with_object({}){acc,(key,value){acc[key]=((acc.values.last | | 0)+value);acc}
用prettier的ruby插件美化:

用户
.按天分组(:在创建时)
计数
.每个带有_对象({})do|acc的_,(键,值)|
acc[键]=((acc.values.last | | 0)+值)
结束

谢谢-我实际上使用了User.group_by_week(:created_at).order(“week asc”).count.map{x,y{x=>(sum+=y)}。reduce({},:merge),因为它不需要每日的粒度