Ruby on rails Rails错误解析

Ruby on rails Rails错误解析,ruby-on-rails,Ruby On Rails,我想覆盖数据库中的现有用户表。我已经手动删除了迁移文件user.rb和模型文件。之后,当我键入railsgmodel用户电子邮件:string密码:string 它会再次创建上述文件,但当我运行rake db:migrate命令时,它只会给出以下错误: rake db:migrate

我想覆盖数据库中的现有用户表。我已经手动删除了迁移文件
user.rb
和模型文件。之后,当我键入
railsgmodel用户电子邮件:string密码:string
它会再次创建上述文件,但当我运行
rake db:migrate
命令时,它只会给出以下错误:

rake db:migrate                                                                                                                                          
== 20150413203600 CreateUsers: migrating ======================================                                                                                                               
-- create_table(:users)                                                                                                                                                                       
rake aborted!                                                                                                                                                                                 
StandardError: An error has occurred, this and all later migrations canceled:                                                                                                                 

SQLite3::SQLException: table "users" already exists: CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar(255), "password" varchar(255), "created_at" dateti
me, "updated_at" datetime) /home/action/.gem/ruby/2.1.1/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'      

如果打开
db/schema.rb
文件,您将看到已经有一个users表。如果要在另一台计算机上运行
rake db:migrate
,则删除迁移文件除了不运行迁移文件外没有任何作用。运行
rake db:rollback
将删除rake db:migrate的最后一项内容,然后与
rake db:migrate

一起生成新的用户迁移,您不应该删除迁移文件,因为rails会在
rake db:rollback
命令下使用迁移文件为您删除用户表

如果您不介意丢失所有表,并且因为您使用的是SQLite3,那么您可以在
db
文件夹中查找名为
development.SQLite3
的文件,可能还有
test.SQLite3
。删除这些表,您将不再拥有任何数据库表,您可以运行迁移来重新创建它们

如果只想删除
users
表,请删除最近生成的迁移以“创建用户表”,然后创建迁移
rails g migration DropUsersTable
,然后将其修改为如下所示

class DropUsersTable < ActiveRecord::Migration
  def change
    drop_table :users
  end
end
class DropUsersTable
运行迁移,将删除现有用户表。然后,您应该删除迁移文件。正如我所说,删除迁移文件不是一种好的做法,但在本例中,由于您已经销毁了创建原始用户表的迁移,因此应该销毁删除该表的迁移

此时,您没有引用
用户
表的迁移,也没有
用户
表,因此您现在可以生成迁移来创建它,这一次它应该可以工作了

如果您改变主意,希望再次删除用户表,请记住,不要删除迁移文件,只需执行
rake db:rollback
,然后调整迁移文件以创建所需的表,然后再次运行
rake db:migrate