2013-01-24 63 views
1

更新跟蹤數據庫隨着時間的推移在軌道上

紅寶石我結束了一個專門的統計模型和表,這與使用whenever gem的獲取數據。看看我自己的答案瞭解更多細節。

原單問題

在我的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

的解決方案是在數據庫中統計模型和表。我使用whenever gem每天在統計模型上運行write_stats方法。這可能有點沉重,但它給我提供了很好的數據。

這裏的寶石時

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

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

的schedule.rb而這裏的統計模型

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

謝謝!我已經有這個。這將告訴我在幾次給定的時間內有多少新用戶。但是,我想在幾次給定的時間內獲得用戶總數。所以,我需要跟蹤新用戶以及已刪除的用戶。 –

相關問題