Пропуск проверки электронной почты для Devise Gem приводит к ошибке уникальности - PullRequest
0 голосов
/ 31 мая 2018

В своем приложении на Rails я использую гем Devise для аутентификации пользователей.Мне нужно пропустить проверку электронной почты, если я создаю пользователя из панели администратора.Пока у меня есть этот код:

# User model
class User < ApplicationRecord
  attr_accessor :skip_email_validation

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable

  validates :email, presence: true, uniqueness: true, unless: :skip_email_validation
end

#User's controller create action
class Admin::UsersController < Admin::AdminController
  def create
    @user = User.new(user_params)
    @user.skip_email_validation = true
    if @user.save
      redirect_to admin_user_path(@user), success: 'User created.'
    else
      render :new
    end
  end
end

Итак, когда я создал первого пользователя без электронной почты, он был сохранен в базе данных, но когда я создаю другого пользователя без электронной почты, у меня появляется ошибка:

Mysql2::Error: Duplicate entry '' for key 'index_users_on_email': INSERT INTO `users`

Я не понимаю, что является причиной этой ошибки, потому что я пропускаю проверку наличия и уникальности в модели.Заранее спасибо за ответ.

1 Ответ

0 голосов
/ 31 мая 2018

Возможно, вам потребуется внести изменения на уровне базы данных.

Devise использует уникальный индекс для таблицы Users.

Devise имеет следующее в своей миграции:

add_index :users, :email, unique: true

, что приводит к следующему в db/schema.rb

t.index ["email"], name: "index_users_on_email", unique: true

Вам необходимо изменить это в миграциях / схеме и сбросить базу данных.`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...