Ruby on rails 3 在RoR 3.0中,如何将一个表删减到最近的500个条目?
我有一个表,我想把它删减到最近的500行。在rails中最有效的方法是什么?这肯定是一种方法,尽管有人可能会提出一种更有效的方法。在您的控制器中创建一个方法,在本例中,我将其称为“prune”,并在您的创建操作之后调用它(可能有一个after_过滤器或类似的东西,您可以使用)。它应该是这样的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
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
。这将删除最新的行,而不是最旧的行(尽管没有明确的顺序)。哦,天哪,我忘了对结果排序。这将删除最新的行,而不是最旧的行(虽然没有明确的顺序)。哦,天哪,我忘了给结果排序了。