【问题标题】:Rails SQLite3 duplicate column - Treehouse TutorialRails SQLite3 重复列 - 树屋教程
【发布时间】:2012-11-20 13:22:56
【问题描述】:

我刚刚开始了一个关于简单 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(这是有问题的文件)。移除 Devise 并重新开始的想法闪过我的脑海,但我已经完成了让我遇到这个新错误的事情。

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

我们不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby sqlite devise


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我正在学习相同的课程,我认为错误在于 Ruby 4 刚刚发布,它在 migrate 目录中有重复的行,我删除然后运行 ​​rake db:migrate。效果很好。

      【讨论】:

        【解决方案3】:

        你的错误信息是这样说的:

        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
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-02
          • 1970-01-01
          相关资源
          最近更新 更多