我正在尝试在续集中构建一个查询,这会让我有点麻烦。
基本上我有几个哈希值,每个哈希值包含几个条件。每个哈希中的条件需要在自身内部进行AND,并在每组条件中进行OR。
例如:
conditions = [
{ :id => 123, :published => true },
{ :id => 456, :published => false }
]
应该生成:
SELECT * FROM item WHERE ((id = 123 AND published = true) OR (id = 456 AND published = false))
我有:
conditions.each do |condition|
query = query.where(condition)
end
这将把所有东西放在一起,所以:
conditions.each do |condition|
query = query.or(condition)
end
引发错误,因为OR在查询中需要多个条件。除了将第一个条件弹出到where
而将其余条件弹出到or
之外,这会有点难看:
query.where(condition.first)
conditions[1..-1].each do |condition|
query = query.or(condition)
end
有更好的方法吗?
提前致谢!
答案 0 :(得分:0)
最简单的方法就是将单个查询的结果收集到一个数组中,该数组与在一个查询中将所有AND子句一起进行OR运算相同:
results = conditions.map{|c| query.where(c).all}.flatten