无法使用 Rails 3 迁移新模型

Can not migrate a new model using Rails 3

我正在尝试使用 rails 创建一个新的 table 3. 首先我将模型创建为 rails g model Vendor name:string address:string。当输入 rake db:migrate` 它给了我以下错误。

Error: Mysql::Error: Table 'users' already exists

C:\Site\swargadwara_puri>rake db:migrate
==  CreateUsers: migrating ====================================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql::Error: Table 'users' already exists: CREATE TABLE `users` (`id` int(11) D
EFAULT NULL auto_increment PRIMARY KEY, `contact_name` varchar(255), `login_id`
varchar(255), `password_hash` varchar(255), `password_salt` varchar(255), `phone
` varchar(255), `address` varchar(255), `created_at` datetime NOT NULL, `updated
_at` datetime NOT NULL) ENGINE=InnoDBC:/Site/swargadwara_puri/db/migrate/2015041
9131135_create_users.rb:3:in `change'
C:in `migrate'

20150419131135_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :contact_name
      t.string :login_id
      t.string :password_hash
      t.string :password_salt
      t.string :phone
      t.string :address

      t.timestamps
    end
  end
end

我之前在同一数据库中有一个名为 User 的 table。我也试过命令 rake db:migrate VERSION=201504...... 仍然得到同样的错误。请帮助我解决此错误并成功创建新的 table。

我的解决方案很挑剔,但当我收到此错误时它会起作用,

注释掉你迁移def up的内容。执行 rake db:migrate 然后 rake db:rollback 直至您评论的迁移版本。然后取消注释 def up 方法内容并执行 rake db:migrate.

这种情况下的问题是您已经创建了 User table 并且您的 20150419131135_create_users.rb 迁移文件尝试再次创建用户 table。所以我建议你在你的本地系统中备份这个文件。然后从您的 db/migration 目录中临时删除此文件。然后 运行

rake db:migrate

它将解决您的问题。

现在,正如您在聊天中所说,您没有 create_user 的任何其他迁移文件,我认为您可能丢失了之前在创建 User [=46= 时创建的迁移文件] 或者你可以用不同的方式创建用户 table(不是 rake db:migrate 因为你的迁移目录中没有任何其他这样的文件)。

所以,请按照以下步骤操作:

  1. 从 MYSql 导出用户 table 的数据并将该文件保存在您的系统上。
  2. 从 MYSql
  3. 中删除用户 table
  4. 再次将临时删除的 20150419131135_create_users.rb 文件放入 db/migrate 目录
  5. 运行 rake db:migrate 这将创建您的 User table
  6. 在用户 table 中导入在步骤 1 中导出的用户数据

这样您的迁移问题将永远得到解决,您甚至不会丢失 User table.

的现有数据

您可以像

一样删除数据库并重新创建

rake db:drop && rake db:create && rake db:migrate