2012-06-09 10 views
9

RailsのActiveRecordの中で私はRailsの3.2を使用していると私は、私は、次の条件に一致するすべての行を検索したいデータベーステーブルを持っている:それとも、&と句

=真、およびb = (0 <c <1またはd = 1)であり、a、b、c、dは列である。

私のようなもの持つことができます。私は間違っているかもしれないが、私はあなたがARELベースのどこ機能を使用して、そのクエリを形成することができるとは思わない

Route.where(:a => true, 
      :b => true, 
      :c => 0..1 OR :d=1 
      ).all   
+0

がhttp://stackoverflow.com/questions/3548548/rails3を見てみましょうここで4あなたはまた

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

を行う。これは、見つけることができます-combine-scope-with-or –

+0

このスクリーンキャストで見てくださいhttp://railscasts.com/episodes/354-squeel – mohamagdy

答えて

12

を。自分でデータベースクエリ文字列を作成する必要があります。

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

を、私はこのコードをテストしていませんが、私はあなたのための仕事をするかもしれないと思われる:あなたはSQLiteのかのPostgresを使用していると仮定すると、

。これは、移植性の低いコードではないことに注意してください。クエリを使用しているデータベースを変更すると、そのクエリが中断することがあります。

+3

'(a =:trueとb =:trueと(c>:loとハイト=> 1、:d => 1) 'が安全であるとすれば、異なるデータベースは"真の "または:.where(:a => true、:b => true).where( 'c>:loおよびc <:hi)またはd =:d '、...) 'となります。 –

2

ロブはarelがまだORをサポートしていないと思っています。 arel site

OR演算子はまだサポートされていません。

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

AND演算子は同様に動作します。 Railsでは

+0

私はサイトを使用して非常に新しいです。サイトの使い方を学ぶ。ちょうど上をクリックした。まだ「受け入れる」方法を知らない。 – pepe

+0

申し訳ありませんが、元の質問者とあなたを混乱させてしまいました。 –

9

cは1または2

+0

.allは必須ですか?私はそれがデフォルトだと思う。 – learner

+0

はい.allは必要ではない、私はちょうどそれを質問と一致させていた。 – user2031423

関連する問題