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

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

我试过了:

rails generate migration drop_tablename

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

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


当前回答

Run

rake db:migrate:down VERSION=<version>

其中<version>是您想要恢复的迁移文件的版本号。

例子:-

rake db:migrate:down VERSION=3846656238

其他回答

ActiveRecord:: Base.connection。drop_table: table_name

首先,生成一个具有任意名称的空迁移。这样做很重要,因为它创建了适当的日期。

rails generate migration DropProductsTable

这将在/db/migrate/目录下生成一个。rb文件,如20111015185025_drop_products_table.rb

现在编辑该文件,如下所示:

class DropProductsTable < ActiveRecord::Migration
  def up
    drop_table :products
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

我唯一添加的东西是drop_table:products和raise ActiveRecord::IrreversibleMigration。

然后运行rake db:migrate,它会帮你删除这个表。

删除表/迁移

运行: $ rails生成迁移DropTablename

$ rails生成迁移DropProducts

我不能让它与迁移脚本一起工作,所以我继续使用这个解决方案。使用终端进入rails控制台:

rails c

Type

ActiveRecord::Migration.drop_table(:tablename)

这对我来说很有效。这将删除前一个表。别忘了跑步

rails db:migrate

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

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