带导轨循环遍历散列数组 [英] Loop through array of hashes with rails
本文介绍了带导轨循环遍历散列数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
因此,我正试图从此一系列哈希中夺取所有中学和研究生院:
So I am trying to grab all high schools and graduate schools from this array of hashes:
"education": [
{
"school": {
"id": "110703012290674",
"name": "Kunskapsgymnasiet Malmö"
},
"year": {
"id": "136328419721520",
"name": "2009"
},
"type": "High School"
},
{
"school": {
"id": "112812485399398",
"name": "Malmö University"
},
"year": {
"id": "118118634930920",
"name": "2012"
},
"concentration": [
{
"id": "104076956295773",
"name": "Computer Science"
}
],
"type": "Graduate School",
"classes": [
{
"id": "165093923542525",
"name": "Programmering",
"description": "Kursen fokuserar på metoder och tekniker vid utveckling av webbapplikationer med hjälp av HTML5."
}
]
}
],
赞:
if auth["extra"]["raw_info"]["education"]
# hash/array element 0
if auth["extra"]["raw_info"]["education"][0]["type"] == "High School"
user.highschool_name = auth["extra"]["raw_info"]["education"][0]["school"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][0]["school"].blank?)
user.highschool_year = auth["extra"]["raw_info"]["education"][0]["year"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][0]["year"].blank?)
elsif auth["extra"]["raw_info"]["education"][0]["type"] == "Graduate School"
user.graduateschool_name = auth["extra"]["raw_info"]["education"][0]["school"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][0]["school"].blank?)
user.graduateschool_year = auth["extra"]["raw_info"]["education"][0]["year"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][0]["year"].blank?)
end
# hash/array element 1
if auth["extra"]["raw_info"]["education"][1]["type"] == "High School"
user.highschool_name = auth["extra"]["raw_info"]["education"][1]["school"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][1]["school"].blank?)
user.highschool_year = auth["extra"]["raw_info"]["education"][1]["year"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][1]["year"].blank?)
elsif auth["extra"]["raw_info"]["education"][1]["type"] == "Graduate School"
user.graduateschool_name = auth["extra"]["raw_info"]["education"][1]["school"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][1]["school"].blank?)
user.graduateschool_year = auth["extra"]["raw_info"]["education"][1]["year"]["name"] if (!auth["extra"].blank? && !auth["extra"]["raw_info"]["education"][1]["year"].blank?)
end
end
是否有更有效的方法来实现,例如某种循环?有什么好主意吗?
Is there a more efficient way to do it, like a loop of somekind? Any great ideas?
推荐答案
是的,确切地说,您应该使用循环.似乎您想要这样的东西:
Yes, exactly, you should use a loop. Seems that you want something like this:
if edu = auth["extra"]["raw_info"]["education"]
edu.each do |e|
if e["type"] == "High School"
user.highschool_name = e["school"]["name"] if (!auth["extra"].blank? && !e["school"].blank?)
user.highschool_year = e["year"]["name"] if (!auth["extra"].blank? && !e["year"].blank?)
elsif e["type"] == "Graduate School"
user.graduateschool_name = e["school"]["name"] if (!auth["extra"].blank? && !e["school"].blank?)
user.graduateschool_year = e["year"]["name"] if (!auth["extra"].blank? && !e["year"].blank?)
end
end
end
更新
好的,这是更简单的版本(根据tokland的建议).
Update
Okay, here's even simpler version (based on tokland's suggestions).
if (auth["extra"]["raw_info"]["education"] || []).each do |e|
nameprop, yearprop = if e["type"] == "High School"
[:highschool_name, :highschool_year]
elsif e["type"] == "Graduate School"
[:graduateschool_name, :graduateschool_year]
end
user.send("#{nameprop}=", e["school"]["name"]) if !e["school"].blank?
user.send("#{yearprop}=", e["year"]["name"]) if !e["year"].blank?
end
这篇关于带导轨循环遍历散列数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文