2011-07-19 35 views

回答

3

一種方式做到這一點:

class MyModel 
    after_create do 
    self.class.prune(500) 
    end 

    def self.prune(max) 
    if count > max 
     order('created_at DESC').offset(max).each do |model| 
     model.destroy 
     end 
    end 
    end 
end 

prune類方法也可以,如果你想使用多個加入ActiveRecord::Base楷模。

1

這絕對是這樣做的一種方式,儘管有人可能會以更有效的方式提示。在你的控制器中創建一個方法,在這個例子中,我將它稱爲「修剪」,並在創建操作後調用它(可能會有after_filter或類似的東西)。它應該看起來像這樣。

def prune 
    if MyModel.count > 500 
    @models = MyModel.all(:offset => 500) 
    @models.each do |m| 
     m.destroy! 
    end 
    end 
end 
+0

這將刪除最近的行,而不是最舊的行(儘管[這是不能保證](http://forums.mysql.com/read.php?21,239471,239688#msg-239688),因爲有沒有明確的順序)。 –

+0

噢,我忘了訂購我的結果。 – sensae

相關問題