2017-06-02 7 views
2

私はレールのコンソールで次のステートメントを試してみました:Railsのアクティブレコードの「」メソッド異常

SomeModel.where(["active = ? and price = ? and status_date <= ?", true , nil , Date.parse('20161101')]).size 

は、これは私に>> 0

を与えた後、私はこれに、上記のステートメントを変更:

SomeModel.where([ "active = ? and status_date <= ?", true , Date.parse('20161101') ]).where(price: nil).size 

これは私に与えた>> 533

誰かexplaなぜこれが起こっているのでしょうか?これらの2つの文が同じ出力を出さないのはなぜですか?

仕様:クエリはprice IS NULL代わりのprice = NULL

where(price: nil)を使用してのパラメータ値とprice = ?一方、あなたのための正しいSQLが生成されますする必要がありますNULLとの比較のためのRails 5.0.0、Postgresは

答えて

3

nilはレコードと一致しません。

+0

ありがとうございました。では、クエリを最初の文のように見せる方法はありますか? – rohank

+0

いつも 'NULL'と比較しているのなら、条件をインラインで書くことができます。パラメータの値をどこに書いてもかまいません(' 'active =? 'NULL'を実行すると、2番目のスタイルのクエリを使用すると、異なるクエリが生成されますので、より良い選択です。 – mikej

関連する問題