如何在ROR中从数据库中永久删除表

时间:2018-08-31 06:07:19

标签: ruby-on-rails

我生成了一个脚手架,然后迁移了我的数据库。之后,我销毁了脚手架,然后再次生成了脚手架,并尝试迁移数据库,但出现错误,表明该表已存在。如何从数据库中删除该表?

4 个答案:

答案 0 :(得分:1)

如果尚未推送代码,则@Cryptex Technologies提供的解决方案可以正常工作。但是,如果您拥有(即,如果您正在使用版本控制),那么我将不推荐这种方法。在这种情况下,您应该创建一个新的迁移,如下所示:

class RemoveTable < ActiveRecord::Migration[5.2]
  def up
    drop_table :table_name
  end

  def down
    create_table :table_name do |t|
      t.string :field_name_1
      t.text :field_name_2
      t.timestamps
    end

    add_index :table_name, :field_name_1, unique: true
  end
end

答案 1 :(得分:0)

要删除该表,您需要运行命令

rake db:rollback 

,以及是否要删除当前应用程序的数据库。 那么您需要运行命令

rake db:drop.

答案 2 :(得分:0)

另一种简便的方法:

打开Rails控制台并使用以下命令: ActiveRecord::Migration.drop_table(:your_table_name)

答案 3 :(得分:0)

借助命令行生成器,Rails自动生成迁移。 例如,如果要删除“用户表”,请编写这样的命令行语句:

rails generate migration DropUsersTable

这将在/ db / migrate /中生成一个空的.rb文件,在这种情况下,仍然需要填充该文件以删除“用户”表。

Quick-and-Dirty™实现如下所示:

class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

这是“正确的”,因为它表明迁移仅是单向的,不应/不能撤消。但是,为了在修改被撤消的情况下完成一项真正干净的工作,我们需要进行对称迁移(假设我们可以恢复丢失的数据),可以通过在迁移文件中声明表的所有字段来做到这一点:

class Dropusers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end
  end
end

如果模型很复杂,这可能会很长,但可以确保完全可逆性。 同样,在运行rake db:migrate之后,更改将照常生效。