Rails 3.2を使用していて、次の基準に一致するすべての行を検索するデータベーステーブルがあります。
a=trueおよびb=trueおよび(0<c<1またはd=1)、a、b、c、dは列です。
私は次のようなものを持てますか?
Route.where(:a => true,
:b => true,
:c => 0..1 OR :d=1
).all
Rails 3.2を使用していて、次の基準に一致するすべての行を検索するデータベーステーブルがあります。
a=trueおよびb=trueおよび(0<c<1またはd=1)、a、b、c、dは列です。
私は次のようなものを持てますか?
Route.where(:a => true,
:b => true,
:c => 0..1 OR :d=1
).all
私は間違っているかもしれませんが、Arelベースのwhere関数を使用してそのクエリを作成することはできないと思います。データベースクエリ文字列を自分で作成する必要があります。
SQLiteまたはPostgresを使用していると仮定します。
Route.where("a = true and b = true and ((c > 0 and c < 1) or d = 1)").all
私はこのコードをテストしていませんが、それがあなたのために仕事をするかもしれないと思います。これは「移植性の高い」コードではないことに注意してください。使用しているデータベースを変更すると、クエリが機能しなくなる可能性があります。
Rails4では次のこともできます
Route.where(:a => true,:b => true,:c => [1,2]).all
これにより、cが1または2の場所が見つかります。
私はロブがまだORをサポートしていないアレルについて正しいと思います。アレルサイトから:
OR演算子はまだサポートされていません。これは次のように機能します。
users.where(users[:name].eq('bob').or(users[:age].lt(25)))
AND演算子も同様に動作します。