require_relative '20121212123456_create_tablename'
class RevertCreateTablename < ActiveRecord::Migration[5.0]
def change
revert CreateTablename
end
end
def change
drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
end
6
我需要删除我们的迁移脚本以及表格本身...
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
20 回答
rails g migration drop_users
编辑迁移
您无法始终只生成已迁移到已拥有所需代码的迁移 . 您可以创建一个空迁移,然后使用您需要的代码填充它 .
您可以在此处找到有关如何在迁移中完成不同任务的信息:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
更具体地说,您可以使用以下方法查看如何删除表:
首先使用您想要的任何名称生成空迁移 . 这样做很重要,因为它创建了适当的日期 .
这将在/ db / migrate /中生成一个.rb文件,如20111015185025_drop_products_table.rb
现在编辑该文件如下所示:
我添加的唯一内容是
drop_table :products
和raise ActiveRecord::IrreversibleMigration
.然后运行
rake db:migrate
,它会为你删除表 .手动编写迁移 . 例如 . 运行
rails g migration DropUsers
.至于迁移的代码我'm just gonna quote Maxwell Holder'发表Rails Migration Checklist
BAD - 运行rake db:migrate然后rake db:rollback将失败
GOOD - 揭示迁移不应该是可逆的意图
更好 - 实际上是可逆的
虽然这里提供的答案工作正常,我想要更多的东西'straightforward',我在这里找到它:link首先进入rails console:
然后输入:
完成了,为我工作!
您需要使用以下命令创建新的迁移文件
并在新生成的迁移文件(db / migration / xxxxxxx_drop_table_xyz)中编写drop_table代码
或者,如果您想在不迁移的情况下删除表,只需打开rails console
并执行以下命令
或者您可以使用更简化的命令
我认为,要完全“正式”,您需要创建一个新的迁移,并将drop_table放在self.up中 . 然后self.down方法应包含所有代码以完整地重新创建表 . 据推测,您可以在创建迁移时从schema.rb中获取代码 .
看起来有点奇怪,要放入代码来创建一个你知道你不再需要的表,但这样可以保持所有的迁移代码完整并且“正式”,对吧?
我只是为了一个我需要放弃的 table 做了这个,但老实说没有测试“向下”并且不确定为什么我会这样做 .
你可以简单地从rails控制台中删除一个表 . 首先打开控制台
然后在控制台中粘贴此命令
将 table_name 替换为您要删除的表 .
您也可以直接从终端删除表 . 只需输入应用程序的根目录并运行此命令即可
打开你的rails控制台
您可以按照指南中的方式回滚迁移:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
生成迁移:
写下迁移:
这样您也可以回滚并可以用来还原任何迁移
简单而官方的方式是:
现在转到db / migrate并查找包含drop_tablename作为文件名的文件,并将其编辑为此文件 .
然后你需要跑
在你的控制台上 .
ActiveRecord::Base.connection.drop_table :table_name
替代引发异常或尝试重新创建现在空表 - 同时仍然启用迁移回滚,重做等 -
我需要删除我们的迁移脚本以及表格本身...
从终端窗口运行:
要么
Run this command:-
然后:
or if you are using MySql database then:
使用数据库登录
show databases;
show tables;
drop table_name;
你能做的最好的方法是
然后执行以下操作
跑
其中
<version>
是您要还原的迁移文件的版本号 .例:-
如果你想删除一个特定的表,你可以做
否则,如果你想删除所有数据库,你可以做
我无法使用迁移脚本,因此我继续使用此解决方案 . 使用终端输入rails console:
类型
这对我来说很有用 . 这将删除前一个表 . 别忘了跑
Drop Table/Migration
运行: - $ rails生成迁移DropTablename
exp: - $ rails生成迁移DropProducts