Почему мой пользователь создается через консоль Rails, но в базе данных не хранится атрибут электронной почты? - PullRequest
0 голосов
/ 14 января 2019

Я следую учебнику по Rails на railstutorial.org. В настоящее время я собираюсь закончить главу 6. Когда я собираюсь создать нового пользователя через консоль rails, он создается в базе данных, но атрибут email установлен на nil. Когда я назначаю пользователю электронное письмо напрямую, оно изменяется в памяти, но когда я иду и сохраняю его методом save, чтобы сохранить его в базе данных, появляется следующая ошибка:

User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) AND "users"."id" != ? LIMIT

Почему он сохраняется в памяти, а не в базе данных?

Я попытался перенастроить базу данных с rails db:migrate. И удаление всех пользователей в случае, если были другие пользователи с таким же адресом электронной почты (поскольку существует ограничение или правило проверки уникальности почты). Тем не менее получить ту же ошибку.

Это schema.rb

ActiveRecord::Schema.define(version: 2019_01_13_035531) do

create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "password_digest"
    t.index ["email"], name: "index_users_on_email", unique: true
end

end

Это модель пользователя:

class User < ApplicationRecord
    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 }
    has_secure_password
    validates :password, presence: true, length: { minimum: 6 }
end

1 Ответ

0 голосов
/ 14 января 2019

После нескольких часов чтения оказалось, что у меня просто rails db:migrate:reset. И это сработало. Судя по всему, там была еще не уникальная почта или что-то в этом роде. Я не смог полностью понять, почему произошла ошибка, и если кто-то может дать мне лучшее представление о внутреннем функционировании структуры рельсов, я буду очень признателен, так как я новичок в этом тоже. Спасибо за вашу поддержку.

...