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)”删除控制台上的表时