Rails Rails 中的 blank? and present?

luolinae86 · 2015年09月16日 · 最后由 hxh1246996371 回复于 2015年09月17日 · 3305 次阅读

以下各值在 Rails 程序里都看作 blank,而 present? 方法等同于 !blank?

  • nil 和 false,

  • 只包含空白的字符串 (参照下文注释),

  • 空的数组和散列表

  • 任何其他能响应 empty? 方法且为空的对象。

注意这里没有提到数字。通常来说,0 和 0.0 都不是 blank

测试结果

2.0.0-p451 :019 > nil.blank?
 => true 
2.0.0-p451 :020 > false.blank?
 => true 
2.0.0-p451 :021 > "".blank?
 => true 
2.0.0-p451 :022 > {}.blank?
 => true 
2.0.0-p451 :023 > 0.blank?
 => false 
2.0.0-p451 :024 > 0.0.blank?
 => false 

引用自 http://guides.ruby-china.org/active_support_core_extensions.html

可惜 present?是 activesupport 的写法,如果不想用这个 gems,有没有其他更好的写法?

@ericguo 正如你所说,present? 是 ActiveSupport 提供的方法,而 core ruby 没有提供,我暂时也没有想到在原生 ruby 下面,是否有更好的写法。

@楼下的同学,是否能够提供一些参考?😄

[1] pry(main)> def blank? obj
[1] pry(main)*   !obj || (obj.empty? rescue false)
[1] pry(main)* end
=> :blank?
[2] pry(main)> blank? nil
=> true
[3] pry(main)> blank? false
=> true
[4] pry(main)> blank? ""
=> true
[5] pry(main)> blank?({})
=> true
[6] pry(main)> blank? 0
=> false
[7] pry(main)> blank? 0.0
=> false

这样可以不

看了一下 rails 的实现,更简单……

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 15
def blank?
  respond_to?(:empty?) ? !!empty? : !self
end

@piecehealth 感谢你提供的两种参考方式 @hxh1246996371 没想到你在 5 个月前就已经发了类似的内容,只是你的标题是“分享一张图片”,所以在发帖前,我没在本论坛探索到,你发的那张图,我已经收藏 :plus1: 。

#6 楼 @luolinae86 呵呵 我也是在 stackoverflow 上看到的 顺便分享了一下

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