注册,如果电子邮件已存在与设计

时间:2018-01-10 11:06:00

标签: ruby-on-rails ruby devise

我的表User中有一个变量注册(boolean)。因为当连接的用户想要使用电子邮件时,如果该电子邮件不存在于用户表中,则在用户中创建一个新行(仅使用变量email,并且registered = false)。 所以我希望当用户注册时,如果(电子邮件存在并且&&注册== false),他将不会被阻止。 在这种情况下,密码将被替换,并且已注册的变量将更改为true。

我想运行类似的东西:

def create
    @user_registred = User.find(email: params[user: :email])
    if @user_registred.any?
      if @user_registred.registred == false
        @user = User.update(params[:user])
      else 
        notice: "Email already taked"
      end
    else
      @user = User.new(params[:user])
    end
  end

1 个答案:

答案 0 :(得分:1)

我认为设计已经在电子邮件中提供了独特性。除此之外,您还可以对uniqueness here进行验证,而不是使用其他列。除此之外,您还可以设置数据库级别uniqueness constraint

更新: 看看下面的代码。

user = User.where(email: 'test@email.com').first_or_initialize
if user.new_record?
  user.save
  Do your stuff.
else
  user.update_attributes(attributes goes here)
  and do your other stuff
end