2016-08-24 14 views
0

私のデータベースで、visibleフィールドがNULLまたはtrueのいずれかの会社に照会しようとしています。ここで私はStackoverflowの記事で見つけたものです:Rails 4:where句でORを照会できない

@companies = Company.where('visible=? OR visible=?', nil, true).page(params[:page]).per(10) 

これは何とか、これはnilを照会するために動作していないようです。このコードを使用すると、可視でないすべての企業を表示することは非常にうまく機能します。

@companies = Company.where('visible' => nil).page(params[:page]).per(10) 

私は非常に感謝しています。

ありがとうございます!


EDIT:

Company.where('visible=?', nil)がクエリを作るためだ
@companies = Company.where('visible is ? OR visible=?', nil, true).page(params[:page]).per(10) 

答えて

2

会社ロード(0.3ms)SELECT

これはまだ見えるがnilである企業のみを表示companies。* FROM companies WHERE (可視= NULL)SQLにおいて

は、NULLと比較するために、=は動作しません。代わりにISが必要です。

Company.where('visible is ?', nil)はあなたのためのトリックを行う必要があります。それに加えて、またはステートメント。 。

会社ロード(0.3ms)companiesをSELECT * companies WHERE (可視がNULLである)

OR、完璧な方法FROM:

Company.where(:visible => [true, nil]) 
+0

ありがとうございました。私はちょうどこれを試して、私の質問を更新しました。私は現在、無関係なクエリに対して "is"を使用していますが、私は可視ではない企業のみを見ています。 – patrick

+0

'visible'はブール値のフィールドです、そうですか?あなたのSQLの値をチェックして、falseの場合は0、trueの場合は1、不在の場合はnullを再確認できますか?クエリの 'true'はブール値フィールドの' 1'に変換されます。 – kiddorails

+0

Visibleは確かにブール値のフィールドです。私は1つのテスト会社を持っており、他のすべての企業は現在データベースにNULLを持っています。 – patrick

1

問題は、あなたが持っているということですDBにNOT NULL制約はありません。

また、条件式(CASE)または関数COALESCEを使用することもできます。

+0

これを追加するにはどうすればいいですか? – patrick

+0

新しいテーブルとカラムの場合、 '' 'null:false'''オプションを追加する必要があります。既存のテーブル/カラムに対しては、 '' ALTER TABLE'''を実行するか、またはARの '' '' change_table'''メソッドを使用する必要があります。 ここでは愚かな単純な例です: '' ' create_table:my_table do | t | t.column:title、:string、null:false end '' ' –

関連する問題