我生成了一个脚手架,然后迁移了我的数据库。之后,我销毁了脚手架,然后再次生成了脚手架,并尝试迁移数据库,但出现错误,表明该表已存在。如何从数据库中删除该表?
答案 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
之后,更改将照常生效。