使用 activeadmin 和设计在 rails 上迁移时出现重复错误

duplicate error in migrating on rails with activeadmin and devise

我正在尝试通过设计在 rails 上安装 activeadmin。 我添加了 gemfile 和 运行

rake db:migrate

我遇到了这些错误。

== 20170821153121 DeviseCreateAdminUsers: migrating ===========================
-- create_table(:admin_users)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "admin_users" already exists: CREATE TABLE "admin_users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "email" varchar DEFAULT '' NOT NULL, "encrypted_password" varchar DEFAULT '' NOT NULL, "reset_password_token" varchar, "reset_password_sent_at" datetime, "remember_created_at" datetime, "sign_in_count" integer DEFAULT 0 NOT NULL, "current_sign_in_at" datetime, "last_sign_in_at" datetime, "current_sign_in_ip" varchar, "last_sign_in_ip" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
/Users/admin/.rvm/gems/ruby-2.4.1/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `initialize'
/Users/admin/.rvm/gems/ruby-2.4.1/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `new'
/Users/admin/.rvm/gems/ruby-2.4.1/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:91:in `prepare'
/Users/admin/.rvm/gems/ruby-2.4.1/gems/sqlite3-1.3.13/lib/sqlite3/database.rb:137:in `execute'
...

嗯,这个错误是很容易解释的,你的数据库已经有一个 table 具有相同的名称 Devise/Active 管理员想要使用并且 table 名称必须是唯一的。

您是否已经在某个时候 use/try activeadmin gem?如果您已经为它创建了 tables,尝试创建和执行新的迁移将会失败,但是您应该能够只使用它们,或者删除它们并创建新的。

或者您的应用程序恰好有一个供自己使用的 AdminUser 模型?如果确实如此,则必须更改其中之一。

您应该能够在 db/schema.rbdb/migrations/ 中的旧迁移中看到任何一种情况。如果您尝试 deleting/reverting 一个迁移,只是在没有先回滚(rails db:rollback 或数据库备份)的情况下不使用脚本删除它的迁移,那么您实际上可能在数据库中还有旧的 table,您可能希望手动删除。

如果您确实需要重命名活动管理员 table,Github Database tables name prefix #4960 中给出的建议是手动编辑迁移并使用 self.table_name=模型告诉他们新的名字。

嗯,它自己重复的错误你已经有相同的 table 调用 "admin_users"。

请 运行 rails 控制台上的命令以这样查看您已经创建的 tables:

ActiveRecord::Base.connection.tables

如果您在列表中找到相同的 table,那么您需要手动删除 table 或者另一种方法是删除您的数据库并在之后重新创建它,您可以 运行 你的新迁移。