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は
ありがとうございました。では、クエリを最初の文のように見せる方法はありますか? – rohank
いつも 'NULL'と比較しているのなら、条件をインラインで書くことができます。パラメータの値をどこに書いてもかまいません(' 'active =? 'NULL'を実行すると、2番目のスタイルのクエリを使用すると、異なるクエリが生成されますので、より良い選択です。 – mikej