ruby-on-rails - Rails 教程:SQLite3::ConstraintException:唯一约束失败:users.email

标签 ruby-on-rails railstutorial.org

我正在关注 Rails 教程。我在 ch。 6,我在使用 SQLite3 时遇到一个奇怪的错误(为了记录,我使用的是 sqlite 版本 1.3.10,而教程使用的是 1.3.9)

我在运行 rake db:migrate 时没有收到错误消息,但是当我为测试环境运行迁移时,我得到了以下信息:

$ bundle exec rake test:models

rake aborted!
ActiveRecord::PendingMigrationError:

Migrations are pending. To resolve this issue, run:

    bin/rake db:migrate RAILS_ENV=test

sample_app/test/test_helper.rb:3:in `<top (required)>'
sample_app/test/models/user_test.rb:1:in `require'
sample_app/test/models/user_test.rb:1:in `<top (required)>'
Tasks: TOP => test:models
(See full trace by running task with --trace)


$ bundle exec rake db:migrate RAILS_ENV=test

== 20150628011937 AddIndexToUsersEmail: migrating ===========================
==
    -- add_index(:users, :email, {:unique=>true})
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:


SQLite3::ConstraintException: UNIQUE constraint failed: users.email: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")sample_app/db/migrate/20150628011937_add_index_to_users_email.rb:3:in `change'
C:in `migrate'
ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constrain
t failed: users.email: CREATE UNIQUE INDEX "index_users_on_email" ON "users"
("email")
sample_app/db/migrate/20150628011937_add_index_to_users_email.rb:3:in `change'
C:in `migrate'
SQLite3::ConstraintException: UNIQUE constraint failed: users.email
sample_app/db/migrate/20150628011937_add_index_to_users_email.rb:3:in `change'
C:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

这是我的 user.rb 模型:
class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
end

这是我最近的迁移
  class AddIndexToUsersEmail < ActiveRecord::Migration
    def change
      add_index :users, :email, unique: true
    end
  end

如果相关,我可以发布任何其他文件。在此先感谢您的帮助!

最佳答案

问题是在迁移之前,我在数据库中有用户使用相同的电子邮件。
db:reset解决了一切

关于ruby-on-rails - Rails 教程:SQLite3::ConstraintException:唯一约束失败:users.email,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095429/

相关文章:

python - 如何压缩字符串?

ruby-on-rails - 在 OpenSUSE 中安装 PG gem

ruby-on-rails - RoR 教程 Michael Hartl 5.27

ruby-on-rails - 似乎无法创建具有特定 Rails 版本的应用程序 [Hartl 的教程]

ruby-on-rails - Rails - 错误部分未渲染

ruby-on-rails - has_one/has_many rails 与主键以外的备用源 ID 关联

ruby-on-rails - Rails 多态关系和 link_to

ruby-on-rails - 自动重新加载 config/locales 中的 rails yml 文件

ruby-on-rails-3 - 为什么在 Rails 中路由时使用 match 而不是 get?

ruby-on-rails - 为什么在保存对象后使用 'reload' 方法? (Hartl Rails Tut 6.30)