Ruby on rails 在RubyonRails中随时间跟踪数据库

Ruby on rails 在RubyonRails中随时间跟踪数据库,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,更新 我最终得到了一个专用的统计模型和表,它使用。请看我自己的答案以了解更多细节 原始问题 在我的RubyonRails应用程序中,我想在我的管理页面中制作一个图表,显示一段时间内我网站上的用户数量 图表应显示去年所有日期的用户数量 如果出现新用户,曲线将上升,如果用户被删除,曲线将下降 这就是我想要的JSON结果 [ { "date": "23-01-2013", "users": 3201 }, { "date": "2

更新

我最终得到了一个专用的统计模型和表,它使用。请看我自己的答案以了解更多细节

原始问题

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

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

如果出现新用户,曲线将上升,如果用户被删除,曲线将下降

这就是我想要的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过滤器来更新统计模型


有没有更好的方法,也许有一颗宝石可以做到这一点?我想我还没有找到解决办法,因为我不知道这叫什么

统计模型是一种可能性。如果您不想添加额外的模型,您可以进行适当的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的新用户数量也将类似


统计模型是一种可能性。如果您不想添加额外的模型,您可以进行适当的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的新用户数量也将类似


解决方案是在数据库中创建一个统计模型和表。我每天都在统计模型上运行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

解决方案是在数据库中创建一个统计模型和表。我每天都在统计模型上运行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

谢谢我已经有这个了。这将告诉我在几个给定的时间我们有多少新用户。但是,我想得到在几个给定时间的用户总数。所以,我需要跟踪新用户以及删除的用户。谢谢!我已经有这个了。这将告诉我在几个给定的时间我们有多少新用户。但是,我想得到在几个给定时间的用户总数。因此,我需要跟踪新用户以及删除的用户。