Rails Tutorial: SQLite3 :: ConstraintException: UNIQUE constraint failed: users.email

I follow the rail instructions. I'm on the alert. 6, and I get a strange error with SQLite3 (for the record I use sqlite version 1.3.10, and the manual uses 1.3.9)

I do not get an error when running rake db: migrate, but when I start the migration for a test environment, this is what I get:

$ 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) 

Here is my user.rb model:

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

Here is my last migration

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

I can publish any other files if they are relevant. Thanks in advance for your help!

+6
source share
2 answers

The problem was that before the migration I had users in the database with the same address.

db:reset solves everything

+16
source

if you cannot reset:db , you should try to delete it manually, go to the db folder and delete the files " development.sqlite3 " and " test.sqlite3 " then run the rails db:migrate and bin/rails db:migrate RAILS_ENV=TEST

worked for me, anyway ...

0
source

Source: https://habr.com/ru/post/989874/


All Articles