LinkedInからユーザーサインイン用に取得しているハッシュ(「auth」)を処理するために、ユーザーモデルで以下のメソッドを取得するのに問題があります。
def self.deep_get auth, *fields
auth.inject(auth) { |acc, e| acc[e] if acc }
end
omniauth / LinkedIn gemを使用してユーザーを作成するときに、ユーザーモデルの後半で「deep_get」メソッドを呼び出します。ただし、プロバイダー/ uid / headline/emailのユーザーフィールドにはnilではないことがわかっているnil値が返されます。
このアプローチは機能している(nil値を返さない)ため、例としてfirst_nameフィールドとlast_nameフィールドを含めましたが、(私が理解しているように)スタイル/例外処理が不適切です。私のdeep_getinjectメソッドがハッシュ内のデータを取得するために機能していない理由についてのアイデアはありますか?
def self.create_from_omniauth(auth)
create! do |user|
# i'd like to retrieve user information from linkedin per the following with my inject method, but i am getting nil values when i should be getting data.
# :provider and :uid are on the same branch level of data. first_name,last_name,email,etc. are on a branch just below called 'info'
user.provider = deep_get(auth, :provider)
user.uid = deep_get(auth, :uid)
user.headline = deep_get(auth, :info, :headline)
user.email = deep_get(auth, :info, :email)
# the below is working but i know pokemon exception handling is not good style.
begin
user.first_name = auth["info"]["first_name"]
rescue
end
begin
user.last_name = auth["info"]["last_name"]
rescue
end