ActiveRecord,pgsql:按多个索引查询多个记录

时间:2019-01-21 17:45:52

标签: ruby-on-rails postgresql activerecord

在我的Users表中,用户是由account_idlocation_id对中的唯一多重索引定义的。
当我收到获取特定帐户/位置对数据的请求时,我可以轻松地检索该对数据:

account_location_hash = { account_id: 2, location_id: 3 }
user = User.find_by(account_location_hash)

但是,当我需要查找具有散列(数百对)的多个用户时,没有简单的方法来获得所需的实体,尽管我已经获得了这些实体的索引列表。
我尝试使用:

pairs_array = [{ account_id: 2, location_id: 3 },{ account_id: 1, location_id: 4 }]
user = User.where(pairs_array)

但这不起作用。

我可以找到更复杂的解决方案,例如构造一个AND和OR的查询,或者创建一个我得到的对的临时表并联接这些表,但是它们都不对。
我想念一个简单的方法吗?

2 个答案:

答案 0 :(得分:0)

这是我到目前为止发现的最简单的解决方案(使用@engineersmnky评论,Rails 5):

pairs_array.reduce(User.none) {|users, pair| users.or(User.where(pair))}

答案 1 :(得分:0)

我认为最简单的解决方案是:

pairs_array = [{ account_id: 2, location_id: 3 },{ account_id: 1, location_id: 4 }]

account_ids = []
location_ids = []
pairs_array.each do |h|
  account_ids << h[:account_id]
  location_ids << h[:location_id]
end

User.where('account_id IN (?) AND location_id IN (?)', account_ids, location_ids).load