2013-05-23 15 views
7

Tôi đang sử dụng groupdate và chartkick để thử và hiển thị biểu đồ hiển thị mức tăng (và giảm) của cơ sở người dùng của chúng tôi theo thời gian.Rails: Sử dụng groupdate & chartkick để tạo biểu đồ người dùng tích lũy

Sử dụng sau nó hoạt động tốt trong một biểu đồ cột, nhưng đi haywire trong một biểu đồ đường thẳng:

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

bất cứ ai có thể chỉ cho tôi đi đúng hướng? Hay có cách nào tốt hơn để làm việc này?

Trả lời

10

Martin câu trả lời đã được đóng, nhưng tôi đã kết thúc bằng:

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

Để có được hàng tuần - chú ý đến thứ tự ("Tuần asc") - đó là những gì cố định nó ...

11

Đó là vì bạn cần sắp xếp trước khi thực hiện tổng tích luỹ.

Hãy thử điều này:

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

Cảm ơn - Tôi thực sự đã kết thúc bằng User.group_by_week (: created_at) .order ("week asc"). Count.map {| x, y | {x => (sum + = y)}} .reduce ({},: merge) không cần độ chi tiết hàng ngày – Les

Các vấn đề liên quan