2012-07-05 45 views
0

我在軌道3Rails 3的破壞,如果用戶擁有超過10

使用STI我希望做一個檢查,看看如果用戶有超過10個活動的活動流我設計數據庫最古老的項目創建項目。當用戶在數據庫中創建他的第11個活動時,我希望它能銷燬最早的記錄*基本上是用戶創建的第一個記錄等等。*這樣我就可以保持數據庫清潔成千上萬的無用記錄。

我假設我會開始在模型級別,但由於我不想在模型中定義「current_user」,它應該在控制器中。

任何幫助將不勝感激,以完成這項任務,我對這些類型的更高級的軌道任務是相當新的。

回答

3

您可以將此邏輯掛鉤在AR回調中。假設你保持軌道約定造型你的時候班,每個活動屬於一個用戶,你就可以很容易地做你的Activity模型如下:

after_save do |record| 
    if Activity.where(:user => record.user).count >= 11 
    Activity.where(:user => record.user).order('created_at asc').first.destroy 
    end 
end 

我想這將創建三個交易數據庫(一個用於計數,另一個查找第一條記錄,另一條刪除它)。我想知道是否有更高效的方法來執行此操作,因爲它將在每個Activity#save上調用...

+0

哦,你是一個拯救生命的人!既然你質疑它的效率,我不會選中這個標記,但如果今天沒有人回覆,我會檢查這個,非常好! – kaigth 2012-07-05 17:39:54

+0

很高興提供幫助。說實話,我不會在真實世界的情況下這樣做。相反,您可以始終擁有活動模型的類方法或範圍,以獲取給定用戶的最新10項活動。這樣,您可以保留所有用戶活動的歷史記錄,並且不會在每次「Activity#save」調用中額外查詢數據庫時浪費資源。 – muxcmux 2012-07-06 12:03:48