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` の場合。検証では電子メールが既に存在することが示されているため、ファインダーはその 1 つの既存のユーザー レコードを返す必要がありますが、今回は nil を返します。これはどのように発生しますか?
記録として、エラーをログに記録しました。メールは適切なメールアドレスです。これは 1 日に 1 回程度発生し、自分で再現することはできません。