Rails错误解决

时间:2015-04-13 20:44:58

标签: ruby-on-rails

我想覆盖数据库中的现有用户表。我已手动删除了迁移文件user.rb和模型文件。之后我输入rails g model User email:string password: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'      

2 个答案:

答案 0 :(得分:0)

如果您打开db/schema.rb文件,则会看到您已有用户表。如果您要在另一台计算机上运行rake db:migrate,则删除迁移文件除了不运行迁移文件之外不会执行任何操作。运行rake db:rollback将删除您支持db:migrate的最后一件事,然后生成新的用户迁移以及rake db:migrate

答案 1 :(得分:0)

您不应该删除迁移文件,因为rails会使用rake db:rollback命令下的迁移文件为您删除users表。

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

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

class DropUsersTable < ActiveRecord::Migration
  def change
    drop_table :users
  end
end

运行迁移,这将删除现有用户表。然后,您应该删除迁移文件。正如我所说,删除迁移文件并不是一个好习惯,但在这种情况下,由于您已经销毁了创建原始用户表的迁移,因此您应该销毁丢弃该表的迁移。

此时,您没有引用users表的迁移,并且您没有users表,因此您现在可以生成迁移以创建它,这次它应该可以正常工作。

如果你改变主意并想再次删除用户表,请记住,不要删除迁移文件,只需执行rake db:rollback然后根据需要调整迁移文件以创建表格,然后再次运行rake db:migrate