2012-08-17 75 views
0

我从返回值一样的API调用得到一个哈希如下:与柱比较哈希 - Rails的

[{"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是上面的散列。

任何建议,将不胜感激。谢谢!

回答

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"))