Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用and或进行Sequel查询链接_Ruby_Sequel - Fatal编程技术网

Ruby 如何使用and或进行Sequel查询链接

Ruby 如何使用and或进行Sequel查询链接,ruby,sequel,Ruby,Sequel,我试图在Sequel中构建一个查询,这给我带来了一些麻烦 基本上我有几个散列,每个散列包含几个条件。每个散列中的条件需要在其自身和/或每组条件内进行转换 例如: conditions = [ { :id => 123, :published => true }, { :id => 456, :published => false } ] 应产生: SELECT * FROM item WHERE ((id = 123 AND published = true)

我试图在Sequel中构建一个查询,这给我带来了一些麻烦

基本上我有几个散列,每个散列包含几个条件。每个散列中的条件需要在其自身和/或每组条件内进行转换

例如:

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在查询中需要多个条件。除了将第一个条件放入
,其中
,将其余条件放入
,这会有点难看之外:

query.where(condition.first)
conditions[1..-1].each do |condition|
  query = query.or(condition)
end

有更好的方法吗?

最简单的方法就是将单个查询的结果收集到一个数组中,该数组与在一个查询中获取或组合所有AND子句的方法相同:

results = conditions.map{|c| query.where(c).all}.flatten