2012-08-17 34 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"))