我正在尝试在 Sequel 中构建一个查询,这给我带来了一些麻烦。
基本上我有几个哈希,每个都包含几个条件。每个散列中的条件需要在它们自身内部进行 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 在查询中需要多个条件。除了将第一个条件放入 awhere
并将其余的放入 a之外or
,这有点难看:
query.where(condition.first)
conditions[1..-1].each do |condition|
query = query.or(condition)
end
有更好的方法吗?