直观感受一下:
2.6.5 :001 > a="0"
=> "0"
2.6.5 :002 > ActiveModel::Type::Boolean.new.cast(a)
=> false
2.6.5 :003 > ActiveModel::Type::Boolean.new.cast(a) ? "yes" : "no"
=> "no"
2.6.5 :004 > a="f"
=> "f"
2.6.5 :005 > ActiveModel::Type::Boolean.new.cast(a)
=> false
2.6.5 :006 > a=1
=> 1
2.6.5 :007 > ActiveModel::Type::Boolean.new.cast(a)
=> true
2.6.5 :008 > a=""
=> ""
2.6.5 :009 > ActiveModel::Type::Boolean.new.cast(a)
=> nil
没错,就是ActiveRecord::Type::BooleanActiveRecord::Type::Booleanhttps://api.rubyonrails.org/classes/ActiveModel/Type/Boolean.html
判断依据:
"false", "f" , "0", 0 或 FALSE_VALUES 中的任何其他值将被转换为 false;空的字符串将被转换为nil;所有其他的值将被转换为真。
FALSE_VALUES = [ false, 0, "0", :"0", "f", :f, "F", :F, "false", :false, "FALSE", :FALSE, "off", :off, "OFF", :OFF, ].to_set.freeze