如果特定电子邮件(空白电子邮件)已经存在,如何允许设计保存用户?

How to allow devise to save user if a specific email (blank email) already exist?

我有一个设计用户model.When要创建一个用户,不需要电子邮件(电子邮件是可选的)。我可以创建第一个没有电子邮件(空白电子邮件)的用户time.When 我第二次添加用户时出现错误

duplicate key value violates unique constraint "index_accounts_on_email" DETAIL: Key (email)=() already exists.

我认为如果已经存在空白电子邮件,就会发生这种情况。

有没有一种方法可以仅在电子邮件不为空时验证唯一性,并且我可以添加尽可能多的具有空白电子邮件的用户?

user.rb

class User < ApplicationRecord

 devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :validatable, :confirmable, :omniauthable

protected
 def password_required?
  false
 end

def email_required?
  false
end

end

如果您查看创建用户的迁移文件,您会发现以下行:

add_index :users, :email, unique: true

删除它的一种方法是删除完整的索引并在没有唯一性的情况下再次添加它:

remove_index :users, :email
add_index :users, :email

现在它不会检查电子邮件的唯一性,您可以随时随地自行处理。