移行スクリプトとテーブル自体を削除する必要がありました...
class Util::Table < ActiveRecord::Migration
def self.clobber(table_name)
# drop the table
if ActiveRecord::Base.connection.table_exists? table_name
puts "\n== " + table_name.upcase.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
drop_table table_name
end
# locate any existing migrations for a table and delete them
base_folder = File.join(Rails.root.to_s, 'db', 'migrate')
Dir[File.join(base_folder, '**', '*.rb')].each do |file|
if file =~ /create_#{table_name}.rb/
puts "== deleting migration: " + file.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
FileUtils.rm_rf(file)
break
end
end
end
def self.clobber_all
# delete every table in the db, along with every corresponding migration
ActiveRecord::Base.connection.tables.each {|t| clobber t}
end
end
端末ウィンドウから:
$ rails runner "Util::Table.clobber 'your_table_name'"
または
$ rails runner "Util::Table.clobber_all"
rails generate migration
それはない-など、列を追加または変更、テーブルを作成するための移行コードを生成するためのコマンドラインオプションを持っている、それはまた、テーブルをドロップするためのオプションを持っていた場合、それはいいだろう。確かに、up
部分の記述は単純です-呼び出すだけですdrop_table
-しかし、down
表を再度生成する部分は、特に問題の表のスキーマが最初の作成後に移行によって変更されている場合は、必ずしもそれほど単純ではないかもしれません。たぶん誰かがそのようなオプションを追加することは良い考えだとRailsの開発者に提案するべきです。