Rails 按对或运算查询活动记录

Rails Query Active Record By Pairs OR'ed

我有一个 API 看起来像...

get(not_unique_id:, pairs: [])

...其中对可以看起来像 [{ foo: 1, bar: 'a' }, { foo: 2, bar: 'b' }] 我想编写一个查询来查找给定非唯一 ID 的所有条目,按对过滤,即 ...

Thing.where(not_unique_id: not_unique_id)
# need help here -> .where("(foo = #{pairs.first[:foo]} AND bar = #{pairs.first[:bar]}) OR (foo = #{pairs.second[:foo]} AND bar = #{pairs.second[:bar]}) OR ...")
.map # or whatever else I want to do

我需要一种方法来对我的输入对中的每个条目执行此 foo AND bar 比较,或者一起 return 所有不唯一的结果ID AND 其中一对的值。

您可以使用 or 将多个 where 子句与 OR 链接在一起:

Record.where(a: 'b').or(Record.where(c: 'd')).to_sql
# => select * from records where (a = 'b' OR c = 'd')

使用这个和您的条件数组,您可以为 reduce 调用提供 "seed" 的起始 Record.all 并通过 or 链接多个连续条件进入范围:

conditions = [{ foo: 1, bar: 'a' }, { foo: 2, bar: 'b' }]

records = conditions.inject(Record.all) do |scope, condition|
            scope.or(Record.where(condition))
          end