0

DataMapperでORクエリを実行したい場合

result = MyModel.all(:first_name.like => '%john%') + MyModel.all(:last_name.like => '%john%')

これは正常に機能し、SQLクエリを1つだけ生成します。配列で指定されたプロパティを使用して同じ結果を作成するにはどうすればよいですか?

result = [ :first_name, :last_name ].reduce([]) do |sum, prop|
  sum + MyModel.all(prop.like => '%john%')
end

これは機能しますが、2つの別々のSQLクエリを使用しますが、これは私が望んでいることではありません。そのような「怠惰な」クエリをループで作成する方法はありますか?

4

2 に答える 2

0

WHERE句を手動で作成する必要があります。このようなもの:

props = []
values = []
[ :first_name, :last_name ].each do |prop|
  props << "(#{prop} LIKE ?)"
  values << '%john%'
end
MyModel.all :conditions => [props.join(' OR ')] + values
于 2012-07-28T18:33:15.460 に答える
0

私はそれを自分で理解しました。[]問題は、結果変数の初期値として空の通常の配列()を使用できないことです。DataMapperの内部を深く掘り下げたくなかったので、次のresultように、の最初の割り当てに追加のチェックを使用しました。

result = nil
[ :first_name, :last_name ].each do |prop|
  cur = MyModel.all(prop.like => '%john%')
  next unless cur
  result ? result.nil? cur : result + cur
end
于 2012-07-30T16:09:32.670 に答える