在我的Users
表中,用户是由account_id
和location_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的查询,或者创建一个我得到的对的临时表并联接这些表,但是它们都不对。
我想念一个简单的方法吗?
答案 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