LoginSignup
6
4

More than 5 years have passed since last update.

Mongoidでfieldにdefaultを指定するとnilが隠蔽されてハマる

Last updated at Posted at 2012-04-03

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として扱われていて実に面倒くさい

6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4