比较哈希与列 - Rails

时间:2012-08-17 14:52:58

标签: ruby-on-rails database activerecord hash

我从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是上面的哈希。

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

1 个答案:

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