0

我从返回值如下的 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 是上面的哈希值。

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

4

1 回答 1

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"))
于 2012-08-17T15:00:14.253 回答