ActiveRecord :: RecordNotUnique(PG :: UniqueViolplicate键值违反了唯一约束" index_users_on_email" ation:ERROR:du

时间:2017-07-28 18:23:41

标签: ruby-on-rails ruby activerecord

我使用omniauth-kakao gem登录SNS。

然后我成功登录,我获得了SNS的令牌和个人资料。

但是当其他用户(不是我)通过SNS注册时,我遇到了错误

ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_users_on_email"

这是导致错误的app/model/user.rb中的代码

def self.find_for_oauth(auth, signed_in_resource = nil)
  identity = Identity.find_for_oauth(auth)
  user = signed_in_resource ? signed_in_resource : identity.user

  if user.nil?
    email = auth.info.email
    user = User.where(:email => email).first
    unless self.where(email: auth.info.email).exists?
      if user.nil?
          user = User.new(
            profile_img: auth.info.image,
            password: Devise.friendly_token[0,20]
          )
        user.save!      #Error message said this line is problem
      end
    end
  end

  if identity.user != user
    identity.user = user
    identity.save!
  end
  user
end

另外,我制作了两个型号。 User.rbIdentity.rb。(Identity.rb请参阅User.rb)

Identity.rb有'提供商(sns)','用户'柱。 User.rb拥有用户的信息,SNS列的个人资料。

发生错误时,行已添加到Identity.rb,此行中没有user_id用户'用户' column。(添加了其他内容,但未添加user_id)

此外,行未添加到User.rb从不

问题是什么?

1 个答案:

答案 0 :(得分:0)

如果你没有用以下代码在db中保存email用户:

if user.nil?

    user = User.new(
      profile_img: auth.info.image,

      password: Devise.friendly_token[0,20]
    )
  user.save!      #Error message said this line is problem
end

应该是这样的:

if user.nil?

    user = User.new(
      profile_img: auth.info.image,
      email: email,
      password: Devise.friendly_token[0,20]
    )
  user.save!      #Error message said this line is problem
end