Skip to main content

Command Palette

Search for a command to run...

Rails Active Records - where, where-not and nil

Published
2 min read

Today my coworker pointed out that confusing behavior of where.not query dealing with nil. We need extra care when filtering SQL queries with nil. I'll put it together for future reference.

all records

User.all.count
#=> 1509

nil | non-nil

Records that have nil comment id

# The "nil" group
User.where(comment_id: nil).count
#=> 191

Records that have non-nil comment id

# The "non-nil" group
User.where.not(comment_id: nil).count
#=> 1318

matching id | the rest

Records that has comment_id 839

User.where(comment_id: [839]).count
#=> 8

Records that does not have comment_id 839

User.where.not(comment_id: [839]).or(User.where(comment_id: nil)).count
#=> 1501

WARNING: The following does not do the job for this type of grouping.

# Bad example
User.where.not(comment_id: [839]).where.not(comment_id: nil).count
User.where.not(comment_id: [nil, 839]).count

matching id | not matching non-nil | nil id

Records that has comment_id 839

# find records that has comment_id 839
User.where(comment_id: [839]).count
#=> 8

Records that do not have comment_id 839 AND that do not have nil comment_id

User.where.not(comment_id: [839]).where.not(comment_id: nil).count
#=> 1310

Records that have nil comment id

User.where(comment_id: nil).count
#=> 191

Resources

More from this blog

Raspberry Pi TensorFlow Liteで物体検出を楽しむ

この記事について Raspberry Pi、TensorFlow、Pythonのいずれにも詳しくない筆者が、物体検出をやって楽しんだ成果の記録です。 TensorFlow公式の物体検出のサンプルプログラムを実行します。 動作環境 ボード Raspberry Pi 4 Model B OS Raspberry Pi OS (32-bit または 64-bit) デスクトップ環境 カメラ Raspberry Pi カメラモジュール v2 Python Python ...

Apr 23, 20231 min read

Elixir Circuits.I2C with Mox

This is written in Japanese. I might convert it to English later, maybe. はじめに Elixirのテストでモックを用意するときに利用するElixirパッケージとして、moxが人気です。Elixir作者のJosé Valimさんが作ったからということもありますが、ただモックを用意するだけではなくElixirアプリの構成をより良くするためのアイデアにまで言及されているので、教科書のようなものと思っています。 一言でいうと「その場...

Dec 3, 20213 min read
M

Masatoshi Nishiguchi's Blog

62 posts