1

更新

我最终得到了一个专用的统计模型和表格,它使用when gem获取数据。查看我自己的答案以获取更多详细信息。

原始问题

在我的 ruby​​ on rails 应用程序中,我想在我的管理页面中制作一个图表,显示我网站上一段时间内的用户数量。

该图表应显示去年所有日期的用户数。

如果有新用户出现,曲线就会上升,如果用户被删除,曲线就会下降。

这将是我所追求的 JSON 结果。

[
    {
        "date": "23-01-2013",
        "users": 3201
    },
    {
        "date": "24-01-2013",
        "users": 3451
    },
    {
        "date": "25-01-2013",
        "users": 4351
    },
    {
        "date": "26-01-2013",
        "users": 3950
    },
    {
        "date": "27-01-2013",
        "users": 4150
    }
]

我考虑过创建一个统计模型,并在我的用户模型中添加 before_create 和 before_destroy 过滤器来更新统计模型。

有没有更好的方法,也许是这样做的宝石?我想我还没有找到解决方案,因为我不知道这叫什么。

4

2 回答 2

1

统计模型是一种可能性。如果你不想添加额外的模型,你可以做一个合适的 SQL 查询,例如列出 MySQL 中每年可以使用的新用户数

SELECT Year(created_at) as 'year', COUNT(id) as 'users' 
       FROM users GROUP BY Year(created_at); 
# or
SELECT DATE_FORMAT(created_at, '%Y') as 'year', COUNT(id) as 'users' 
       FROM users 
       GROUP BY DATE_FORMAT(created_at, '%Y');

每个月的新用户数量将类似地使用MySQL的DATE_FORMAT 函数

SELECT DATE_FORMAT(created_at, '%X.%m') as 'year', COUNT(id) as 'users' 
       FROM users 
       GROUP BY DATE_FORMAT(created_at, '%X.%m'); 
于 2013-01-24T16:49:23.713 回答
0

解决方案是在数据库中制作统计模型和表格。我每天使用when gem在统计模型上运行write_stats 方法。它可能有点重,但它为我提供了很好的数据。

这是无论何时宝石的 schedule.rb

set :output, "#{path}/log/cron.log"

every :day, at: "11:58 PM" do
  runner "Statistics.write_count"
end

这是统计模型

class Statistics < ActiveRecord::Base
  def self.write_count
    stats = Statistics.new
    stats.users = User.count
    stats.save!
  end
end

统计表有时间戳,所以查询很容易。

这是一个

@stats = Statistics.where(created_at: (Time.now.years_ago(1)..Time.now))
于 2013-01-25T09:32:29.347 回答