我在我的Rails应用程序中创建了一个名为Categorie的模型。 由于出错,我需要删除模型。Rails:耙由于已经存在的表而中止,但无法删除它
我跑
rails d model Categorie
可以除去我现有的模型。
我忘了在那一刻运行rails g migration DropTable
。
但后来,我需要重新创建Categorie模型,所以我跑:
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似乎创建一个表,而不是删除我想要的。
你是怎样尝试删除该表?错误消息正在发生,因为该表仍在MySQL数据库中,而不是因为它在'schema.rb'中。如果您使用MySQL客户端删除表,那么无论“schema.rb”中的内容如何,您的迁移都应该成功。 – Brian
@Brian我做了rails g迁移DropCategories,然后我用drop_table修改了迁移文件:类别 – justinedps26
您可以尝试回滚(rake db:rollback),然后更改迁移文件,以便只有一个文件创建表。 N.B:回滚将模式回滚到以前的版本。 –