2013-02-12 50 views
0

我有一個不再需要的子類。每個環境數據庫中可能存在一些實例。我想摧毀他們和他們的所有家屬。能夠使用ProgramOne.destroy_all會很好,但顯然如果我刪除了類,它將不存在。如果沒有ProgramOne存在,或者是開始編寫SQL查詢的最佳解決方案,是否有使用Program.where(:type => 'ProgramOne')的方法?destroy_all不存在的子類

class Program < ActiveRecord::Base 
end 

class ProgramOne < Program 
end 

回答

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