我有一个可以从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
保存!为零:NilClass`。由于验证说电子邮件已经存在,我的finder应该返回一个现有的用户记录,但现在它返回nil。怎么会发生这种情况?
对于记录,我记录了错误,电子邮件是一个正确的电子邮件地址。这种情况大约每天发生一次,我自己无法重现。
答案 0 :(得分:0)
可能是这行原因问题,因为如果找不到用户,它将返回nil,你没有引发异常,你正在记录异常,
user = User.find_by_email(user.email)
您的代码非常复杂,您可以编写简单的代码来实现上述结果。