我正在构建一个与Devise合作的应用程序。某些操作允许用户通过输入其电子邮件来邀请其他用户。但有时用户尚未注册。
为了避免表格和条件的倍增(在已注册和未注册的用户之间),我选择创建空用户(包含电子邮件,ID和注册(错误)变量)。这使我可以始终使用相同的用户进行不同的邀请,即使用户尚未注册。
这个想法是,当用户注册时,它会自动检索其他用户以前记录的所有信息(在这种情况下是邀请)
但是,Devise电子邮件默认定义为uniq(跨方法:validatable)。
在注册期间,我需要设置以下条件:
if email does not exist
New User
elsif email exist && not registred
Update User with this email
else
message:'email already token'
end
我尝试了几种解决方案:
RegistrationsController#Create:
@previous_account = User.where(email: params[:user][:email]).first
if @previous_account == nil && @previous_account.registred != true
@user = User.new(params[:user])
else
# This update the user with his password and other informations, but keeping the same id (to keep all the previous invitations)
@previous_account.update(params[:user])
end
或
用户模型:
before_create:verif_exist
def verif_exist
pre_user = User.where(email: self.email).first
if pre_user != nil && pre_user.registred != true
pre_user.update(encrypted_password: self.encrypted_password, registred: true)
else
self.save
end
end
我不知道如何解决这个问题,如果有人在他的应用程序中具有相同的特性,我很乐意看到你的解决方案。