如何在Ruby中检查参数“param [:some_value]”

时间:2012-08-19 07:38:45

标签: ruby ruby-on-rails-3.2

我知道一些检查参数是否为零的方法

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]因为它最简单也很短。

4 个答案:

答案 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)

相关案例是:

  1. 哈希缺少密钥(及其值)
  2. 哈希值为密钥<{li>的nil
  3. 哈希值为空字符串("")或空数组([])为密钥
  4. 散列具有键的其他值
  5. 根据您想要绘制线条的位置,使用适当的方法。

    • 1 vs. 2,3,4:!param.key?(:some_value)
    • 1,2对3,4:param[:some_value].nil?
    • 1,2,3 vs. 4:param[:some_value].blank?
    • 2,3,4与1:param.key?(:some_value)
    • 3,4与1,2:param[:some_value]
    • 4 vs. 1,2,3:param[:some_value].present?

答案 2 :(得分:2)

if param[:some_value]是最常见的一种。

但是如果你正在使用布尔数据(truefalse)这是最好的方法 将是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?版本。