使用Rails 5检查数据库中是否存在列表中的所有ID

时间:2017-01-16 22:56:25

标签: ruby-on-rails

在我的Rails 5 + Postgres应用程序中,我有一张乘客表。我选择了这些乘客的子集并将它们存储为乘客。

passengers = Passenger.where(...)

每位乘客都有一个Id。

我还有一个ID [1,2,3,6,8,9]列表。

现在我想检查那些给定的Ids是否存在于乘客对象中的Ids。

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:2)

加载所有数据只是为了检查在数据库中你需要多少时效率不高,你可以做的最好的是:

ids = [1,2,3,6,8,9]
passengers_count = Passenger.where(id: ids).count
passengers_count == ids.count 

答案 1 :(得分:1)

您是否需要检查所有是否存在,或至少有一个存在?

ids = [1,2,3,6,8,9]
passenger_ids = passengers.collect(&:id)

检查所有

def contains_all(ids, passenger_ids)
  ids.each do |id|
    return false unless passenger_ids.include?(id)
  end
  return true
end

或单线

(passenger_ids & ids) == ids

检查任何

def contains_any(ids, passenger_ids)
  ids.each do |id|
    return true if passenger_ids.include?(id)
  end
end

或(再次!)单线

(passenger_ids & ids).size > 0

答案 2 :(得分:0)

如果我理解你的问题,下面应该给你所有id为你的ids阵列一部分的乘客

passengers.collect(&:id) & [1,2,3,6,8,9]