Ruby bool 可能造成的坑

armstrong · 2015年09月09日 · 最后由 armstrong 回复于 2015年09月10日 · 1779 次阅读

1. 检查是否为空

h = {enabled: false}

# 会产生混淆的结果
h[:enabled].present?   #=> false
h[:enabled].blank?     #=> true

# 可以这样
h[:enabled].nil?       #=> false



2. model 里面验证字段必填时, enabled=false,则会提示: enabled 不能为空。其实已经设置了 false 

class ModelName < ActiveRecord::Base
  validate_presence_of :enabled
end

# 可以这样
class ModelName < ActiveRecord::Base
  validates :enabled, :inclusion => {:in => [true, false]}
end

欢迎拍砖!

我的写法一般是 h.include? : enabled 。。。。

如果传一个 {enabled: nil } 呢,就不对了吧

h.has_key? :enabled

h[:enabled].present?   #=> false
h[:enabled].blank?     #=> true

这个不就是:

false.present?   #=> false
false.blank?     #=> true

这个没有啥不清楚的啊,present? 和 blank? 本来就用来表示 false, nil 或者空的数组哈希 为空。

#4 楼 @yanguango 这里用来区别

  • 填了 true
  • 填了 false
  • 没填

一、

h.fetch(:enabled, false) == true

二、这个是你设计问题,你既然需求是 填了 true/填了 false/没填,为啥用 boolean,要用 integer

我是的目的是只要填了,不管是 true, 还是 false,都应该是 present? == true,它不就是 /存在/ 的意思嘛

需要 登录 后方可回复, 如果你还没有账号请 注册新账号