跟踪数据库随着时间的推移在ruby轨道上

时间:2013-01-24 10:57:12

标签: ruby-on-rails rails-activerecord

更新

我最终得到了一个专用的统计模型和表格,可以使用whenever 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过滤器。

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

2 个答案:

答案 0 :(得分: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 function

SELECT DATE_FORMAT(created_at, '%X.%m') as 'year', COUNT(id) as 'users' 
       FROM users 
       GROUP BY DATE_FORMAT(created_at, '%X.%m'); 

答案 1 :(得分:0)

解决方案是在数据库中创建统计模型和表。我每天都使用whenever 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))