Ruby on rails 使用except删除哈希键
我有这样一个杂凑:Ruby on rails 使用except删除哈希键,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有这样一个杂凑: my_hash = { "user_attributes" => { "email" => "email@email.com", "person_attributes" => { "first_name" => "a_name", "last_name" => "a_name" } } } 我想删除所有“person\u attributes”内容,因此我使用了
my_hash = {
"user_attributes" => {
"email" => "email@email.com",
"person_attributes" => {
"first_name" => "a_name",
"last_name" => "a_name"
}
}
}
我想删除所有“person\u attributes”
内容,因此我使用了:
my_hash.except("person_attributes")
但这没有任何作用。如何删除子散列键?除person\u属性外,您必须使用此项获取
我的散列['user\u attrbiutes']:
2.1.0 :010 > my_hash['user_attributes'].except('person_attributes')
=> {"email"=>"email@email.com"}
以{“user\u attributes”=>{“email”=>的形式获取输出email@email.com“}}
您可以使用:
=> {"user_attributes"=>{"email"=>"email@email.com", "person_attributes"=>{"first_name"=>"a_name", "last_name"=>"a_name"}}}
2.1.0 :026 > my_hash['user_attributes'].delete('person_attributes')
=> {"first_name"=>"a_name", "last_name"=>"a_name"}
2.1.0 :027 > my_hash
=> {"user_attributes"=>{"email"=>"email@email.com"}}
personal\u attributes
是否总是在散列中的同一个位置(user\u attributes->personal\u attributes)?我认为,除非是一个rails函数,而不是一个标准的ruby函数,否则不会对底层散列进行变异,所以你要么使用散列,要么自己对散列进行变异。OK,我将删除ruby标记, sorry@YoannAugen不要删除ruby标签,my_hash.tap{x | x[“用户属性”)。delete(“person_属性”)}
是一个有效的ruby答案,我认为只返回用户属性子键。因此,您丢失了“user\u attributes”键引用,如果您有相同级别的其他键,它们也将丢失。预期结果是:{“user\u attributes”=>{“email”=>“email@email.com“}}参考修订:)好的,也可以。这和我的_hash.tap注释解决方案对我来说是可以的。谢谢