我的表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
答案 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