16

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          
4

3 に答える 3

18

私は間違っているかもしれませんが、Arelベースのwhere関数を使用してそのクエリを作成することはできないと思います。データベースクエリ文字列を自分で作成する必要があります。

SQLiteまたはPostgresを使用していると仮定します。

Route.where("a = true and b = true and ((c > 0 and c < 1) or d = 1)").all

私はこのコードをテストしていませんが、それがあなたのために仕事をするかもしれないと思います。これは「移植性の高い」コードではないことに注意してください。使用しているデータベースを変更すると、クエリが機能しなくなる可能性があります。

于 2012-06-09T06:16:14.050 に答える
15

Rails4では次のこともできます

Route.where(:a => true,:b => true,:c => [1,2]).all

これにより、cが1または2の場所が見つかります。

于 2014-09-04T19:33:01.933 に答える
3

私はロブがまだORをサポートしていないアレルについて正しいと思います。アレルサイトから:

OR演算子はまだサポートされていません。これは次のように機能します。

users.where(users[:name].eq('bob').or(users[:age].lt(25)))

AND演算子も同様に動作します。

于 2012-06-13T21:53:50.207 に答える