Mongoidによくハメられる。
field: :flag, type: Boolean, default: false
の時
pry
11:23:16:pry > MyModel.all.map(&:flag)
=> [false, false, false, false, false, false, false, false, false, false, false, false, false, false]
pry
11:23:21:pry > MyModel.where(flag: false).count
=> 3
!?
pry
11:23:25:pry > MyModel.where(flag: nil).count
=> 11
同じデータで、defalut指定を外してfield: :flag, type: Boolean
の時
pry
11:23:16:pry > MyModel.all.map(&:flag)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, false, false, false, nil]
実際はnilなのに、fieldの値を参照するとdefaultの値が見える。そのくせwhere句で検索したときはnilとして扱われていて実に面倒くさい