我知道一些检查参数是否为零的方法
if param[:some_value]
if param[:some_value].present?
if !param[:some_value].nil? #unless param[:some_value].nil?
if !param[:some_value].blank? #unless param[:some_value].blank?
哪一个是正确且最受欢迎的?他们之间有什么区别?
我宁愿使用if param[:some_value]
因为它最简单也很短。
答案 0 :(得分:15)
以下是nil?
,blank?
和present?
之间的一些差异:
>> "".nil?
=> false
>> "".blank?
=> true
>> "".present?
=> false
>> " ".nil?
=> false
>> " ".blank?
=> true
>> " ".present?
=> false
请注意,present?
会转换为not nil and not blank
。另请注意,虽然nil?
由Ruby提供,但blank?
和present?
是Rails提供的帮助程序。
那么,选择哪一个?当然,这取决于你想要什么,但是当评估params [:some_value]时,你通常不仅要检查它不是nil,还要检查它是否为空字符串。这些都由present?
涵盖。
答案 1 :(得分:3)
相关案例是:
nil
""
)或空数组([]
)为密钥根据您想要绘制线条的位置,使用适当的方法。
!param.key?(:some_value)
param[:some_value].nil?
param[:some_value].blank?
param.key?(:some_value)
param[:some_value]
param[:some_value].present?
答案 2 :(得分:2)
if param[:some_value]
是最常见的一种。
但是如果你正在使用布尔数据(true
,false
)这是最好的方法
将是if !param[:some_value].nil?
,因为:
>> hash = {foo:false, bar:nil}
>> !! hash[:foo]
=> false
>> !! hash[:bar]
=> false
>> !! !hash[:foo].nil?
=> true
>> !! !hash[:bar].nil?
=> false
(!!
返回布尔值,将在if语句中测试)
同样重要的是测试值是否真的为零,或者是否未定义键值组合。 key?(key)
为你做到了。
>> hash ={foo:nil}
>> hash[:foo]
=> nil
>> hash[:not_there]
=> nil
>> hash.key?(:foo)
=> true
>> hash.key?(:not_there)
=> false
答案 3 :(得分:1)
这取决于你想做什么,但我通常使用这些形式:
if param[:some_value]
...
end
# and
param[:some_value] && something
# or
param[:some_value] || somethinn
当然,只有参数不能为false
时,它们才有效。在那种情况下,我会选择unless param[:some_value].nil?
版本。