我从API调用中获取一个哈希,它返回如下值:
[{"name"=>"Abby Allen", "id"=>"123"}, {"name"=>"Barry Burner", "id"=>"234"}, {"name"=>"Cat Catrelli", "id"=>"345"}, {"name"=>"Darrell Dogooder", "id"=>"456"}, {"name"=>"Eva Ewing", "id"=>"567"}]
我想将此哈希中的id与我当前在我的数据库中的“apiid”列(用户模型)进行比较,并返回哈希和“apiid”列共有的所有ID。
即。我的用户模型中的apiid列如下所示
apiid
001
123
125
333
345
我是这样尝试的,但任何建议都无法让它发挥作用。最终,apiid列将很长,所以我也在寻找最有效的方法。
User.find_each(:select => "apiid") do |user|
@friendscommon = @friends.select{|key, hash| hash["id"] == user }
end
其中@friends是上面的哈希。
任何建议将不胜感激。谢谢!
答案 0 :(得分:2)
您想要提取哈希数组中所有ID的数组:
apiids = hash.map { |user| user["id"] }
这将导致apiids成为id的数组,即:
apiids = ["123","234","345","456","567"]
并将其传递给查询:
User.select(:apiid).where(:apiid => apiids)
这里,where子句有效地看到:
where(:apiid => ["123","234","345","456","567"])
转换为:
SELECT apiid FROM users WHERE (users.apiid IN ("123","234","345","456","567"))