我添加了一个我认为我将需要的表格,但现在不再计划使用它。我该如何移除那张桌子?

我已经运行了迁移,所以这个表在我的数据库中。我认为rails生成迁移应该能够处理这个问题,但我还没有弄清楚如何处理。

我试过了:

rails generate migration drop_tablename

但这只是产生了一个空迁移。

在Rails中删除表的“官方”方式是什么?


当前回答

替代引发异常或试图重新创建一个现在空的表-同时仍然启用迁移回滚,重做等-

def change
  drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?('users')
end

其他回答

你不能简单地运行drop_table:table_name,相反,你可以通过运行以下命令创建一个空迁移: rails迁移drop安装

然后你可以把这个添加到空迁移中:

class DropInstalls < ActiveRecord::Migration
  def change
    drop_table :installs
  end
end

然后在命令行中运行rails db:migrate,这将删除安装表 在这里找到了解决方案

你可以按照指南中的方式回滚一次迁移:

http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations

生成迁移:

rails generate migration revert_create_tablename

编写迁移:

require_relative '20121212123456_create_tablename'

class RevertCreateTablename < ActiveRecord::Migration[5.0]
  def change
    revert CreateTablename    
  end
end

通过这种方式,您还可以回滚并用于恢复任何迁移

您需要使用以下命令创建一个新的迁移文件

rails generate migration drop_table_xyz

并在新生成的迁移文件(db/migration/xxxxxxx_drop_table_xyz)中编写drop_table代码

drop_table :tablename

或者如果你想在不迁移的情况下删除表,只需打开rails控制台by

$ rails c

并执行以下命令

ActiveRecord::Base.connection.execute("drop table table_name")

或者你可以使用更简单的命令

ActiveRecord::Migration.drop_table(:table_name)

您可以简单地从rails控制台删除一个表。 首先打开控制台

$ rails c

然后将此命令粘贴到控制台

ActiveRecord::Migration.drop_table(:table_name)

将table_name替换为要删除的表。

您也可以直接从终端删除表。只需输入应用程序的根目录并运行此命令

$ rails runner "Util::Table.clobber 'table_name'"

您并不总是能够简单地生成迁移来拥有您想要的代码。您可以创建一个空迁移,然后用您需要的代码填充它。

你可以在这里找到关于如何在迁移中完成不同任务的信息:

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

更具体地说,你可以看到如何使用以下方法删除一个表:

drop_table :table_name