如何解决 ruby​​ on Rails 中的“false.blank?”问题?

jul*_*lez 5 ruby-on-rails

我需要检查布尔变量是否已设置其值,我可以通过检查它是否包含空字符串""nil指示该值尚未设置以及另一个值truefalse指示该值已设置来知道。

我尝试使用,blank?但 Railsblank?在调用时false实际上会返回的方法上有这个问题true

false.blank? # Returns true

因此,当变量的值设置为 false 时,它​​会给我该值的误报,就好像该变量尚未设置一样。

如何在 Ruby on Rails 中检查变量是否未设置("", nil)或已设置(true, false, 0, )?1

Dav*_*mpy 2

[编辑首先给出这个解决方案]:我认为最好的解决方案是明确说明:

def not_set?(x)
  [nil, ''].include?(x)
end
Run Code Online (Sandbox Code Playgroud)

这比转换为字符串的性能更高,所有人都可以清楚地理解,并且涵盖未来未知的意外输入。


这是我最初的解决方案,更简短,Ruby-er,但性能较差,健壮性较差:

尝试my_var.to_s.empty?

我相信这涵盖了您感兴趣的所有六种情况:

puts " show unset (nil, '') "
puts ''.to_s.empty?
puts nil.to_s.empty?

puts " show set (true, false, 0, 1) "
puts true.to_s.empty?
puts false.to_s.empty?
puts 0.to_s.empty?
puts 1.to_s.empty?
Run Code Online (Sandbox Code Playgroud)

产量:

show unset (nil, '') 
true 
true 
show set (true, false, 0, 1) 
false 
false 
false 
false 
Run Code Online (Sandbox Code Playgroud)