Ruby on rails 3 在RoR 3.0中,如何将一个表删减到最近的500个条目?

Ruby on rails 3 在RoR 3.0中,如何将一个表删减到最近的500个条目?,ruby-on-rails-3,Ruby On Rails 3,我有一个表,我想把它删减到最近的500行。在rails中最有效的方法是什么?这肯定是一种方法,尽管有人可能会提出一种更有效的方法。在您的控制器中创建一个方法,在本例中,我将其称为“prune”,并在您的创建操作之后调用它(可能有一个after_过滤器或类似的东西,您可以使用)。它应该是这样的 def prune if MyModel.count > 500 @models = MyModel.all(:offset => 500) @models.each do

我有一个表,我想把它删减到最近的500行。在rails中最有效的方法是什么?

这肯定是一种方法,尽管有人可能会提出一种更有效的方法。在您的控制器中创建一个方法,在本例中,我将其称为“prune”,并在您的创建操作之后调用它(可能有一个after_过滤器或类似的东西,您可以使用)。它应该是这样的

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

这绝对是一种方法,尽管有人可能会提出一种更有效的方法。在您的控制器中创建一个方法,在本例中,我将其称为“prune”,并在您的创建操作之后调用它(可能有一个after_过滤器或类似的东西,您可以使用)。它应该是这样的

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

基本解决方案是在调度应用程序下使用以下脚本,如运行以下命令:

模具订单('updated_at DESC')。偏移量(20)。每个{m{m.destroy}

用模型的名称替换模具。cron和调度的使用已在以下文章中详细讨论:

基本解决方案是在调度应用程序下使用以下脚本,如运行以下命令:

模具订单('updated_at DESC')。偏移量(20)。每个{m{m.destroy}
用模型的名称替换模具。cron和调度的使用已在以下帖子中详细讨论:

一种方法:

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

一种方法:

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

这将删除最新的行,而不是最旧的行(尽管没有明确的顺序)。哦,天哪,我忘了对结果排序。这将删除最新的行,而不是最旧的行(虽然没有明确的顺序)。哦,天哪,我忘了给结果排序了。