4

浏览 Michael Hartl 著名的 Rails 教程,遇到了这个问题。

我在一个迁移文件中有这个,由rails generate modeletc 创建:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

后来,我添加了第二个迁移文件:

class AddIndexToUsersEmail < ActiveRecord::Migration
  def change
    add_index :users, :email, unique: true
  end
end

为了尝试更新数据库以包含新数据库,我按照说明运行rake db:migrate,但这给了我一个错误,告诉我我正在尝试创建一个已经存在的表,也就是说我显然遗漏了一些东西。

我……应该删除第一次迁移吗?那没有任何意义。该怎么办?

(这些是 下的唯一文件db/migrate

4

3 回答 3

3

如果您真的想查看哪些迁移已运行到数据库中,您可以检查您的应用程序数据库,有一个名为 schema_migrations 的表,在那里您可以看到每个迁移的唯一 id 作为一行,例如您的迁移被称为: 20130402190449_add_flagand_table.rb,你应该看到数字 20130402190449 作为该表的一行,希望我给你一些指导

于 2013-08-20T01:27:21.293 回答
0

您可以做的是回滚迁移并重新运行。

您可以像这样回滚迁移

#rake db:rollback STEP=2

然后运行

#rake db:migrate

希望它应该工作

于 2013-08-20T02:01:43.930 回答
0

我的问题是我运行的第二次到最后一次迁移,并且在我添加新迁移后它试图再次重新运行该迁移。

我最终只是注释掉了它试图重新运行的代码,然后运行rake db:migrate然后取消注释迁移代码。

这样架构就不会中断,它会修复发生的任何错误。

于 2019-04-24T14:52:30.163 回答