如果已经收到电子邮件,请更新相关用户Devise

时间:2018-01-11 15:16:34

标签: ruby-on-rails devise

我正在构建一个与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

我不知道如何解决这个问题,如果有人在他的应用程序中具有相同的特性,我很乐意看到你的解决方案。

0 个答案:

没有答案