0

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はクエリで複数の条件を必要とするため、エラーをスローします。where最初の条件をaに、残りをaにポップする以外はor、少し醜いでしょう:

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

それを行うためのより良い方法はありますか?

4

1 に答える 1

0

最も簡単なことは、個々のクエリの結果を配列に集めることです。これは、1 つのクエリですべての AND 句を OR 演算するのと同じです。

results = conditions.map{|c| query.where(c).all}.flatten
于 2013-01-16T05:37:52.807 に答える