테이블과 함께 마이그레이션 스크립트를 삭제해야했습니다 ...
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 개발자에게 그러한 옵션을 추가하는 것이 좋은 아이디어라고 제안해야 할 것입니다.