2012-07-04 15 views
5

call_status = openでunit_idがnilでないすべての呼び出しを選択するスコープを作成しています。私は本当にRubyに弱く、またRailsにも新しく、この権利を表現するのに苦労しています。ここでRailsのスコープが等しくない

は私が持っているもの:

scope :open_calls, where(:call_status => "open", :unit_id != nil).order("id ASC") 

はnilを評価するために、さまざまな演算子を使用してIべきか?

+0

はい。私はこれを行う他の方法がどこであるか分かりません( "call_status =?AND NOT unit_id IS NULL"、 "open")。より良い方法があるかもしれませんか? –

+1

このようなスコープは使用しないでください。ちょうどの場合に、これをラムダと共に使用してください。 – Hauleth

答えて

8

私が知る限り、ActiveRecordにハッシュでNULL句を作成するように指示する方法はありません。値"open"nilは、アレイ内に配置されており、我々が使用することを

scope :open_calls, where("call_status IS ? AND unit_id IS NOT ?", "open", nil).order("id ASC") 

注:

scope :open_calls, where(:call_status => "open").where("unit_id IS NOT NULL").order("id ASC") 
+0

ありがとうございました。私は以前にチェーン化していたところでやっていましたが、すべてを1つのハッシュで処理しようとしていました。あなたの助けを感謝、私は今チェーンに固執します。 – nulltek

+1

Rails 4では、 'where.not(unit_id:nil)'を使うこともできます。 – irbanana

0

あなたがこれを行うことができます。しかし、あなたは句はチェーン文字列スタイルとハッシュスタイルすることができます?を挿入します。これは、引用/エスケープなどによるSQLインジェクションのバグを防ぐのに役立ちますので、強くお勧めします。 See here for more.