删除除一个以外的所有模型中的所有行

时间:2014-01-27 20:54:21

标签: ruby-on-rails

最近我发现自己在Rails控制台中做了很多这样的事情:

Image.delete_all && Pencil.delete_all && Glass.delete_all && Price.delete_all

这样做的正确方法是什么?假设我想在该删除链中添加一个新模型,每次我想要重新输入这个模型都是不舒服的。

2 个答案:

答案 0 :(得分:1)

您可以在custom rake task中对此类功能进行分组,或者对于您可以将其放入实用程序库的简单任务进行分组:

# lib/my_utils.rb
module Utils
  def self.delete_models(more_models = [])
    model_classes = [Image, Pencil, Glass, Price] | more_models

    model_classes.each do |klass|
      puts "Deleting all #{klass}"
      klass.delete_all
    end
  end
end

然后在你的控制台中只需要并使用它:

irb> require 'my_utils'
irb> Utils.delete_models # delete default models
irb> Utils.delete_models User # pass an extra model to delete

您可能需要重复做的其他事情,您可以将其放入您的Utils模块并从控制台使用它。

答案 1 :(得分:1)

我会创建一个可以从命令行运行的rake任务

<强> LIB /任务/ util.rake

namespace :util do
  desc "Deletes records from common models"
  task delete_all: :environment do
    %w[Image Pencil Glass Price].map { |k| k.constantize.send(:delete_all) }
  end
end

您可以通过运行rails g task util:delete_all

从命令行创建此rake任务