gpt4 book ai didi

mysql - rails : rake aborted due to an already existing table but can't remove it

转载 作者:行者123 更新时间:2023-11-29 19:01:14 26 4
gpt4 key购买 nike

我在 Rails 应用程序中创建了一个名为 Categorie 的模型。由于一个错误,我需要删除模型。

我跑了

rails d model Categorie

这删除了我现有的模型。

我当时忘记运行rails g migration DropTable

但是后来,我需要重新创建类别模型,所以我运行了:

rails g model Categorie name:string

但是当我想运行rake db:migrate时,我收到以下错误:

rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'categories' already exists: CREATE TABLE `categories` ...

之后,我尝试删除该表以重做所有过程,但它不起作用,该表仍在 schema.rb

我知道不建议从文件中手动执行此操作,这就是为什么我想知道是否有人知道相关信息。我知道这是一个白痴错误,但现在我不知道如何解决这个问题。

以下是我尝试删除表格的方法:

rails g migration DropCategories

def change
drop_table :categories
end

rake db:migrate

我认为删除表存在问题,因为这是我迁移数据库时的输出:

== 20170509123739 CreateCategories: migrating =================================
-- create_table(:categories)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'categories' already exists: CREATE TABLE `categories` (`id` int(11) auto_increment PRIMARY KEY, `name` varchar(255), `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB

Rails 似乎创建了一个表,而不是删除了我想要的表。

最佳答案

如果新迁移中存在该表,您只需删除该表即可:

def change
reversible do |dir|
dir.up do
drop_table :categories if table_exists? :categories # pre rails 5
drop_table :categories, if_exists: true # rails 5 and onwards
end
end

# put the rest of your migration here:
create_table :categories do |t|
t.string :name

t.timestamps
end
end

可逆位确保自定义表删除代码仅在正常运行迁移时执行,并且在执行回滚时被忽略。

关于mysql - rails : rake aborted due to an already existing table but can't remove it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43871915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com