boolean parameter
パラメータの true, false 判定に ActiveRecord::Type::Boolean.new.cast() の利用は注意する。
ActiveRecord::Type::Boolean.new.cast() について
パラメターの boolean 判定で、ActiveRecord::Type::Boolean.new.cast() を利用すると意図しない判定結果になる。きちんと判定結果を理解した上で利用すること。
ActiveRecord::Type::Boolean.new.cast() の動きを確認する。
- nil, "" は nil となる
- false, "false", :false, "FALSE", :FALSE, "f", :f, "F", :F, "off", :off, "OFF", :OFF, 0, "0", :"0" は 偽 となる
- それ以外はは 真 となる
$ rails c irb(main):001:0> ActiveRecord::Type::Boolean.new.cast("true") => true irb(main):002:0> ActiveRecord::Type::Boolean.new.cast("false") => false irb(main):003:0> ActiveRecord::Type::Boolean.new.cast("False") => true irb(main):004:0> ^D $
問題になるのは "false"を typo したとき結果が true になってしまうこと。きちんと文字列判定する関数などを用意するのが良い。
def check_flg?(flag)
return false if flag.nil?
return false if flag.to_s.downcase != "true"
return true
end