更新
我最终得到了一个专用的统计模型和表格,可以使用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过滤器。
有没有更好的方法,也许是这样做的宝石?我想我还没有找到解决方案,因为我不知道这叫什么。
答案 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.rbset :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))