首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >跳过Devise gem的电子邮件验证导致唯一性错误

跳过Devise gem的电子邮件验证导致唯一性错误
EN

Stack Overflow用户
提问于 2018-05-31 19:33:17
回答 1查看 104关注 0票数 1

在我的Rails应用程序中,我使用Devise gem对用户进行身份验证。我需要跳过电子邮件验证,如果我从管理面板创建用户。到目前为止,我有以下代码:

代码语言:javascript
复制
# 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

因此,当我创建第一个没有电子邮件的用户时,它被保存到数据库中,但是当我创建另一个没有电子邮件的用户时,我有一个错误:

代码语言:javascript
复制
Mysql2::Error: Duplicate entry '' for key 'index_users_on_email': INSERT INTO `users`

我不明白是什么导致了这个错误,因为我跳过了模型中存在和唯一性的验证。感谢您的回复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-31 19:39:34

您可能需要在数据库级别进行更改。

Devise在Users表上使用唯一索引。

Devise在其迁移过程中有以下几点:

add_index :users, :email, unique: true

这会在您的db/schema.rb中产生以下结果

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

您需要在迁移/模式中更改这一点,并重置数据库。`

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50623316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档