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