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注释解决方案对我来说是可以的。谢谢