1

我刚刚开始了一个关于简单 Ruby 应用程序的 Treehouse 教程。为了提供上下文,我之前不得不删除并重新开始这个项目,我删除了主应用程序文件夹并重新开始。

按照教程,我们创建了一个用户数据库,其中包括所有设计包含的表(:电子邮件、:名称等)。我得到的错误表明我有一个重复的列名。在查看和修改后,我尝试注释掉问题列,以查看迁移中的事情是否会向前发展,但它只会为下一行提供相同的错误。

有几次我试图删除数据库,重新创建并重新迁移,但我遇到了同样的问题。

理想情况下,我只想删除数据库并重新创建它们,但这似乎不是我能做的事情。

这是错误:

SQLite3::SQLException: duplicate column name: email: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL
/Users/pbj/Desktop/code/rails/treebook/db/migrate/20121130035155_add_devise_to_users.rb:5:in `block in up'
/Users/pbj/Desktop/code/rails/treebook/db/migrate/20121130035155_add_devise_to_users.rb:3:in `up'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

当我从 Devise 生成用户集时,它还给了我 create_status.rb、devise_create_user.rb 和 add_devise_to_users.rb(这是有问题的文件)。删除设计并重新开始的想法掠过我的脑海,但我已经完成了让我遇到这个新错误的事情。

如果这对所有经验丰富的程序员来说有点初级,请道歉,但如上所述,我正在学习,但刚刚脱离了本教程的原始路径。

任何和所有的帮助表示赞赏。

4

3 回答 3

1

我认为尽管db/migrate/0000-00000_create_user.rb您已经向您的模型添加了另一个add_email_to_users迁移。因此,检查您create_user.rb的 db/migration 文件夹并查看 email 列是否已经存在,然后检查其他迁移文件,例如add_email_to_users.rbdb/migrate 文件夹,如果您发现这样的额外文件,则将add_email migration其删除。

最后重命名/删除您的development.sqlite3文件并尝试rake db:migrate从头开始。

这可能会帮助您解决问题。

于 2012-12-03T05:36:52.093 回答
0

我正在学习相同的课程,我认为错误在于 Ruby 4 刚刚问世,它在 migrate 目录上有一个重复的行,我删除然后运行 ​​rake db:migrate。它工作得很好。

于 2014-02-02T08:05:36.233 回答
0

您的错误消息是这样说的:

duplicate column name: email: ALTER TABLE "users" ADD "email" varchar(255) DEFAULT '' NOT NULL

您的迁移文件(然后是一些随机数...)_add_devise_to_users.rb 正在添加您现在应该注释掉的这些行

# t.string :email,              null: false, default: ""

# add_index :users, :email,                unique: true

这将允许您现在使用此命令进行迁移

rake db:migrate

如果您仍在苦苦挣扎并且不介意破坏和重新创建数据库,您可以这样做以重新开始

rake db:drop db:create db:migrate

希望这可以帮助!

于 2016-03-07T16:47:31.253 回答