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

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

我试过了:

rails generate migration drop_tablename

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

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


当前回答

帮助文档

在迁移中,您可以通过以下方式删除表:

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生成迁移DropTablename

$ rails生成迁移DropProducts

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

警告:这样做的风险由您自己承担,正如@z-atef和@nzifnab正确指出的那样,Rails不会意识到这些更改,您的迁移序列填充失败,您的模式将与您的同事的不同。这仅仅是为当地的发展修修补补提供资源。


虽然这里提供的答案工作正常,但我想要一些更“直接”的东西,我在这里找到了:链接 首先进入rails控制台:

$rails console

然后输入:

ActiveRecord::Migration.drop_table(:table_name)

完成了,为我工作了!

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

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

你能做的最好的办法就是

rails g migration Drop_table_Users

然后执行以下操作

rake db:migrate