Ruby on rails 如何从子散列中删除空白值
我想从这个散列中删除Ruby on rails 如何从子散列中删除空白值,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我想从这个散列中删除“password”=>,“password\u confirmation”=>“” 我试过这个: h = { "name"=>"test", "address"=>"test address", "phone"=>"", "users_attributes"=>{ "0"=>{"id"=>"26", "email"=>"test@example.com", "password
“password”=>,“password\u confirmation”=>“
”
我试过这个:
h = { "name"=>"test", "address"=>"test address", "phone"=>"",
"users_attributes"=>{
"0"=>{"id"=>"26", "email"=>"test@example.com",
"password"=>"", "password_confirmation"=>""
}
}
}
我不想删除第一级中的值(即我不想删除“phone”=>“
”)。但它正在删除所有空白值
怎么可能呢?试试看
sanitize_params = Proc.new do |k, v|
v.delete_if(&sanitize_params) if v.kind_of?(Hash)
v.empty?
end
h.delete_if &sanitize_params
或者更全球化
h['users_attributes']['0'].delete("password") &&
h['users_attributes']['0'].delete("password_confirmation")
您可以通过递归实现任意嵌套级别:
h['users_attributes']['0'].delete_if {|key, value| value.empty? }
我想删除除第一级以外的所有空白值。希望这是清楚的。
def purge_empties(h, top_level=true)
h.each_with_object({}) do |(k,v),g|
case v
when Hash
g[k] = purge_empties(v, false)
else
g[k] = v if top_level || !v.empty?
end
end
end
h = { "name"=>"test", "address"=>"test address", "phone"=>"",
"users_attributes"=>{
"0"=>{"id"=>"26", "email"=>"test@example.com",
"password"=>"", "password_confirmation"=>"",
"one_more_level"=>{ "cat"=>"meow", "dog"=>"" }
}
}
}
purge_empties(h)
#=> { "name"=>"test", "address"=>"test address", "phone"=>"",
# "users_attributes"=>{
# "0"=>{
# "id"=>"26", "email"=>"test@example.com",
# "one_more_level"=>{"cat"=>"meow"}
# }
# }
# }