我有一种方法可以从 facebook 用户帐户创建用户。我验证email
列以确保它是唯一的。
class User < ActiveRecord::Base
validates :email,
:'validators/email' => true,
allow_nil: true,
uniqueness:{ case_sensitive: false }
有时在生产中,FB 用户无法创建帐户。它说用户的电子邮件已经存在于数据库中。因此,如果发生这种情况,我编写了一些代码来获取现有用户。
def self.create_by_facebook()
user = User.new()
user.email = facebook_get_me()['email']
# new code
if user.invalid?
if user.errors[:email].join.include?('already registered') #custom msg
user = User.find_by_email(user.email)
if user.nil?
FacebookLogger.error(" no user is found by facebook email")
end
end
end
begin
user.save!
rescue ActiveRecord::RecordInvalid => e
raise
end
user
end
但是,这次错误是undefined method
保存!对于 nil:NilClass`。由于验证表明电子邮件已经存在,我的查找器应该返回一个现有的用户记录,但现在它返回 nil。这怎么会发生?
作为记录,我已经记录了错误,并且电子邮件是正确的电子邮件地址。这大约每天发生一次,我自己无法重现。