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
我有一个 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