在RoR 3.0中,如何将表格修剪为最近的500个条目?

时间:2011-07-19 05:08:36

标签: ruby-on-rails-3

我有一张桌子,我想继续修剪500个最近的行。在rails中执行此操作的最有效方法是什么?

3 个答案:

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

答案 1 :(得分:1)

这绝对是一种方法,尽管有人可能会以更有效的方式参与其中。在你的控制器中创建一个方法,对于这个例子,我将其称为“prune”,并在你的创建动作之后调用它(可能有一个after_filter或类似的东西你可以使用。)它应该看起来像这样。

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

答案 2 :(得分:0)

一个基本的解决方案是在调度应用程序下使用以下脚本,例如每当https://github.com/javan/whenever运行以下命令时: Mould.order('updated_at DESC').offset(20).each {|m| m.destroy } 用您的模型名称替换Mold。 cron和调度的使用已在以下帖子中详细讨论:A cron job for rails: best practices?