如何检查嵌套哈希属性是否为空

时间:2015-11-25 14:18:55

标签: ruby

我有一个哈希

person_params = {"firstname"=>"",
     "lastname"=>"tom123",
     "addresses_attributes"=>
      {"0"=>
        {"address_type"=>"main",
         "catalog_delivery"=>"0",
         "street"=>"tomstr",
         "city"=>"tomcity"
        }
      }
    }

使用person_params[:addresses_attributes],我得到:

# => {"0"=>{"address_type"=>"main", "catalog_delivery"=>"0", "street"=>"tomstr", "zip"=>"", "lockbox"=>"", "city"=>"tomcity", "country"=>""}}

1)如何在没有前导0的情况下获得新哈希?

desired_hash = {"address_type"=>"main", "catalog_delivery"=>"0", "street"=>"tomstr", "zip"=>"", "lockbox"=>"", "city"=>"tomcity", "country"=>""}

2)如何检查新哈希中的属性是否为空?

2 个答案:

答案 0 :(得分:3)

答案1:

person_params[:addresses_attributes]['0']

答案2:

hash = person_params[:addresses_attributes]['0']
hash.empty?

答案 1 :(得分:1)

这看起来就像来自Rails = D的params哈希。无论如何,看起来你的addresses_attributes包含一些嵌套属性。这意味着你在实践中所拥有的更多的是散列数而不是单个散列,这就是你所看到的?它不是一个实际的Ruby数组,而是一个以索引为字符串的哈希。

那你怎么得到地址属性?好吧,如果您只想获得第一个地址,可以采用以下方法:

person_params[:addresses_attributes].values.first

# OR

person_params[:addresses_attributes]["0"]

在第一种情况下,我们将从addreses_attributes散列中获取值,这将为我们提供一个Array,我们可以从中获取第一个项目。如果addresses_attributes中没有值,那么我们将获得nil

在第二种情况下,我们将使用键" 0"来询问哈希值。如果addresses_attributes中没有值,我们也会使用此方法获得nil。 (您可能希望避免使用第二种情况,如果您不确定address_attributes哈希将始终从" 0"并递增为" 1")