Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从子散列中删除空白值_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

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"}
  #       }
  #     }
  #   }