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

Ruby on rails 如何在ROR中从数据库中永久删除表,ruby-on-rails,Ruby On Rails,我已经生成了一个脚手架,然后迁移了我的数据库。在那之后,我销毁了我的脚手架,然后再次生成脚手架,并尝试迁移我的数据库,但我得到一个错误,即该表已经存在。如何从数据库中删除该表?要删除该表,需要运行命令 rake db:rollback 如果要删除当前应用程序的数据库。 然后您需要运行该命令 rake db:drop. 要删除该表,需要运行命令 rake db:rollback 如果要删除当前应用程序的数据库。 然后您需要运行该命令 rake db:drop. 另一个简单的方法是: 打

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

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

rake db:rollback 
如果要删除当前应用程序的数据库。 然后您需要运行该命令

rake db:drop.

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

rake db:rollback 
如果要删除当前应用程序的数据库。 然后您需要运行该命令

rake db:drop.

另一个简单的方法是:

打开rails控制台并使用以下命令:
ActiveRecord::Migration.drop\u table(:您的\u table\u name)

另一种简单的方法:

打开rails控制台并使用以下命令:
ActiveRecord::Migration.drop_table(:您的_table_name)

如果您还没有推送代码,那么@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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
类可移除
如果您还没有推送代码,@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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
类可移除
由于命令行生成器,Rails自动生成迁移。 例如,如果要删除Users表,请编写如下命令行语句:

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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
rails生成迁移DropUsersTable

这将在/db/migrate/中生成空的.rb文件,在本例中,仍需要填充该文件才能删除“Users”表

又快又脏的™ 实施情况如下所示:

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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
class DropUsersTable
这是“正确的”,因为它表明迁移是单向的,不应该/不能逆转。但是为了在这些修改被撤销的情况下进行真正干净的工作,我们需要进行对称迁移(假设我们可以恢复丢失的数据),我们可以通过在迁移文件中声明表的所有字段来实现:

class Dropusers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end
  end
end
class-Dropusers
如果模型很复杂,这可能会很长,但它确保了完全可逆性。
同样,在运行
rakedb:migrate

之后,更改将像往常一样生效,这要归功于命令行生成器,Rails会自动生成迁移。 例如,如果要删除Users表,请编写如下命令行语句:

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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
rails生成迁移DropUsersTable

这将在/db/migrate/中生成空的.rb文件,在本例中,仍需要填充该文件才能删除“Users”表

又快又脏的™ 实施情况如下所示:

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
class DropUsersTable < ActiveRecord::Migration
  def up
    drop_table :users
  end
  def down
    raise ActiveRecord::IrreversibleMigration
  end
end
class DropUsersTable
这是“正确的”,因为它表明迁移是单向的,不应该/不能逆转。但是为了在这些修改被撤销的情况下进行真正干净的工作,我们需要进行对称迁移(假设我们可以恢复丢失的数据),我们可以通过在迁移文件中声明表的所有字段来实现:

class Dropusers < ActiveRecord::Migration
  def change
    drop_table :users do |t|
      t.string :name, null: false
      t.timestamps null: false
    end
  end
end
class-Dropusers
如果模型很复杂,这可能会很长,但它确保了完全可逆性。
在这里,运行
rakedb:migrate

之后,更改将像往常一样生效。如果您想从rails中的数据库中删除一个表,可以使用migration。但是,如果您使用的是MySQL或PostgreSQL等数据库,则可以登录并连接到数据库并删除单个表。您是否已经查看了
rake db:rollback
?在销毁scaffold之前,您是否运行了
rake db:rollback
命令?是的,我正确地完成了这两项操作。当我被使用时“ActiveRecord::Migration.drop\u表(:您的\u表\u名称)“若要在控制台上删除表,它会说不存在这样的表,但当我在生成脚手架后迁移数据库时,它会说表已经存在。若要在rails中从数据库中删除表,可以使用迁移来完成。但是,如果您使用的是MySQL或PostgreSQL等数据库,则可以登录并连接到数据库并删除单个表。您是否已经查看了
rake db:rollback
?在销毁scaffold之前,您是否运行了
rake db:rollback
命令?是的,我正确地完成了这两项操作。当我被使用时“ActiveRecord::Migration.drop_table(:your_table_name)”要在控制台上删除表,它说不存在这样的表,但当我在生成脚手架后迁移数据库时,它说表已经存在。当我使用“ActiveRecord::Migration.drop_table(:your_table_name)”删除控制台上的表时