无法使用Rails 3迁移新模型

时间:2015-04-23 06:30:13

标签: mysql ruby ruby-on-rails-3.2

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

  

错误:Mysql ::错误:表'用户'已存在

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的表。我也试过命令rake db:migrate VERSION=201504......仍然得到同样的错误。请帮我解决此错误并成功创建新表。

3 个答案:

答案 0 :(得分:2)

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

rake db:migrate

它将解决您的问题。

现在,正如你在聊天中所说的那样,你没有任何其他的create_user迁移文件,我想你可能会丢失你在创建User表之前创建的迁移文件,或者你可能以不同的方式创建了User表(不是rake db:migrate,因为你在迁移目录中没有这样的任何其他文件)。

所以,请遵循:

  1. 从MYSql导出用户表的数据并将该文件保存在您的系统上。
  2. 从MYSql
  3. 中删除User表
  4. 再次将该临时删除的20150419131135_create_users.rb文件放入db / migrate目录
  5. 运行rake db:migrate,这将创建您的User表格
  6. 导入在步骤1中导出的用户表格中的用户数据
  7. 通过这种方式,您的迁移问题将永久解决,您甚至不会丢失User表的现有数据。

答案 1 :(得分:0)

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

评论您的迁移def up内容。执行rake db:migrate,然后rake db:rollback执行您的评论迁移版本。然后取消评论def up方法内容并执行rake db:migrate

答案 2 :(得分:0)

您可以删除数据库并再次创建

  

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