我使用OmniAuth与Facebook连接。我正在提取各种信息,并且在只有一种类型的信息中提取信息没有问题。例如,要获取电子邮件地址,我只需将以下内容放在user.rb中:
user.email = auth["info"]["email"]
问题出在多个条目上。例如,对于教育,有两个结果。一所是一所名为Punahou学校的高中,另一所是一所名为伊利诺伊大学厄巴纳-香槟分校的学院。
education:
- !map:Hashie::Mash
school: !map:Hashie::Mash
id: "105510192816251"
name: Punahou School
type: High School
- !map:Hashie::Mash
school: !map:Hashie::Mash
id: "163536409904"
name: University of Illinois at Urbana-Champaign
type: College
我能够使用以下命令拉动第一所学校:
if auth["extra"]["raw_info"]["education"]
user.school = auth["extra"]["raw_info"]["education"][0]["school"]["name"]
end
这样做的问题是,它只拉了第一所学校,即高中。我在这里有几个问题:
- 如果我只想要学院,我怎么能让它拉动伊利诺伊大学厄巴纳-香槟分校?如果有一所高中和大学,我希望代码只选择大学的任何学校。
- 现在,假设我想要高中和大学。我将如何拉动两者,我将如何标记Punahou是高中,UIUC是大学?
- 如果有多个大学,我将如何提取最近的大学入学人数?
与 OmniAuth 和 LinkedIn 有类似的问题,遇到了您的问题,它帮助我想出了解决方案。LinkedIn的哈希以类似于Facebook上述行为的形式返回三个当前位置。将[0]
更改为[1]
,它将在您的示例中拉动大学。对所需的每个条目使用单独的行。我发现LinkedIn哈希按顺序返回了三个当前位置,最新的条目位于[0]
位置。