我有一个哈希
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)如何检查新哈希中的属性是否为空?
答案 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")