我添加了一个我认为我将需要的表格,但现在不再计划使用它。我该如何移除那张桌子?
我已经运行了迁移,所以这个表在我的数据库中。我认为rails生成迁移应该能够处理这个问题,但我还没有弄清楚如何处理。
我试过了:
rails generate migration drop_tablename
但这只是产生了一个空迁移。
在Rails中删除表的“官方”方式是什么?
我添加了一个我认为我将需要的表格,但现在不再计划使用它。我该如何移除那张桌子?
我已经运行了迁移,所以这个表在我的数据库中。我认为rails生成迁移应该能够处理这个问题,但我还没有弄清楚如何处理。
我试过了:
rails generate migration drop_tablename
但这只是产生了一个空迁移。
在Rails中删除表的“官方”方式是什么?
当前回答
手动编写迁移。例如:运行rails g migration DropUsers。
至于迁移的代码,我将引用Maxwell Holder的帖子Rails migration Checklist
BAD—运行rake db:migrate and then rake db:rollback将失败
class DropUsers < ActiveRecord::Migration
def change
drop_table :users
end
end
GOOD -揭示了迁移不应该可逆的意图
class DropUsers < ActiveRecord::Migration
def up
drop_table :users
end
def down
fail ActiveRecord::IrreversibleMigration
end
end
BETTER -实际上是可逆的
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :email, null: false
t.timestamps null: false
end
end
end
其他回答
帮助文档
在迁移中,您可以通过以下方式删除表:
drop_table(table_name, **options)
选项:
:力 设置为:cascade也可以删除依赖对象。默认为false
: if_exists 设置为true仅在表存在时删除它。默认为false
例子:
Create migration for drop table, for example we are want to drop User table rails g migration DropUsers Running via Spring preloader in process 13189 invoke active_record create db/migrate/20211110174028_drop_users.rb Edit migration file, in our case it is db/migrate/20211110174028_drop_users.rb class DropUsers < ActiveRecord::Migration[6.1] def change drop_table :users, if_exist: true end end Run migration for dropping User table rails db:migrate == 20211110174028 DropUsers: migrating =============================== -- drop_table(:users, {:if_exist=>true}) -> 0.4607s
您可以简单地从rails控制台删除一个表。 首先打开控制台
$ rails c
然后将此命令粘贴到控制台
ActiveRecord::Migration.drop_table(:table_name)
将table_name替换为要删除的表。
您也可以直接从终端删除表。只需输入应用程序的根目录并运行此命令
$ rails runner "Util::Table.clobber 'table_name'"
打开rails控制台
ActiveRecord::Base.connection.execute("drop table table_name")
执行命令:-
rails g migration drop_table_name
然后:
rake db:migrate
或者如果你使用的是MySql数据库,那么:
登录数据库 显示数据库; 显示表; table_name下降;
我认为,为了完全“正式”,你需要创建一个新的迁移,并把drop_table放在self.up中。自我。方法应该包含完整地重新创建表的所有代码。假定代码可以从模式中提取。Rb在你创建迁移的时候。
添加代码来创建一个您知道不再需要的表,这似乎有点奇怪,但这将保持所有迁移代码的完整和“正式”,对吗?
我只是对我需要放下的桌子做了这样的操作,但老实说,我没有测试“放下”,也不确定我为什么要这么做。