我添加了一个我认为我将需要的表格,但现在不再计划使用它。我该如何移除那张桌子?
我已经运行了迁移,所以这个表在我的数据库中。我认为rails生成迁移应该能够处理这个问题,但我还没有弄清楚如何处理。
我试过了:
rails generate migration drop_tablename
但这只是产生了一个空迁移。
在Rails中删除表的“官方”方式是什么?
我添加了一个我认为我将需要的表格,但现在不再计划使用它。我该如何移除那张桌子?
我已经运行了迁移,所以这个表在我的数据库中。我认为rails生成迁移应该能够处理这个问题,但我还没有弄清楚如何处理。
我试过了:
rails generate migration drop_tablename
但这只是产生了一个空迁移。
在Rails中删除表的“官方”方式是什么?
当前回答
Run
rake db:migrate:down VERSION=<version>
其中<version>是您想要恢复的迁移文件的版本号。
例子:-
rake db:migrate:down VERSION=3846656238
其他回答
如果有人在寻找如何在SQL中做到这一点。
从终端输入rails dbconsole
输入密码
在控制台做
使用db_name;
DROP TABLE table_name;
exit
请不要忘记从模式中删除迁移文件和表结构
我认为,为了完全“正式”,你需要创建一个新的迁移,并把drop_table放在self.up中。自我。方法应该包含完整地重新创建表的所有代码。假定代码可以从模式中提取。Rb在你创建迁移的时候。
添加代码来创建一个您知道不再需要的表,这似乎有点奇怪,但这将保持所有迁移代码的完整和“正式”,对吗?
我只是对我需要放下的桌子做了这样的操作,但老实说,我没有测试“放下”,也不确定我为什么要这么做。
我需要删除我们的迁移脚本以及表本身……
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'"
or
$ rails runner "Util::Table.clobber_all"
简单而正式的方式是这样的:
rails g migration drop_tablename
现在转到您的db/migrate,并寻找包含drop_tablename作为文件名的文件,并将其编辑为此。
def change
drop_table :table_name
end
那你就得跑
rake db:migrate
在你的控制台。
Rails迁移drop_users 编辑迁移
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :name
t.timestamps
end
end
end
rake db: migrate