destroy_all不存在的子类

时间:2013-02-12 18:28:09

标签: ruby-on-rails-3.2

我有一个不再需要的子类。每个环境数据库中可能存在一些实例。我想摧毁他们和他们所有的家属。能够使用ProgramOne.destroy_all会很高兴,但很明显,如果删除该类,它将不存在。有没有方法可以在没有ProgramOne的情况下使用Program.where(:type => 'ProgramOne'),或者是开始编写SQL查询的最佳解决方案?

class Program < ActiveRecord::Base
end

class ProgramOne < Program
end

1 个答案:

答案 0 :(得分:0)

最佳解决方案是创建一个rake任务并在那里设置类。这样,即使删除了模型文件并删除了所有实例和依赖项,该类也已初始化。

# Rake task
desc 'Remove ProgramOne programs and dependents'
task :destroy_program_one_programs => :environment do
  class ProgramOne < Program
  end
  ProgramOne.destroy_all
end

# Migration
class PurgeProgramOne < ActiveRecord::Migration
  def up
    Rake::Task['destroy_program_one_programs'].invoke
  end
end