Notes posted by CraigBuchek
RSS feed
CraigBuchek -
March 23, 2011
1 thank
Handling nested hashes and arrays
You can use this code to handle nested hashes and arrays. I’m not sure if it handles every case, and it could probably be refactored better, but it’s working quite well for us.
require 'active_support/core_ext/hash' def normalize_params(params, key=nil) params = params.flatten_keys if params.is_a?(Hash) result = {} params.each do |k,v| case v when Hash result[k.to_s] = normalize_params(v) when Array v.each_with_index do |val,i| result["#{k.to_s}[#{i}]"] = val.to_s end else result[k.to_s] = v.to_s end end result end # Adapted from http://snippets.dzone.com/posts/show/6776 class Hash def flatten_keys(newhash={}, keys=nil) self.each do |k, v| k = k.to_s keys2 = keys ? keys+"[#{k}]" : k if v.is_a?(Hash) v.flatten_keys(newhash, keys2) else newhash[keys2] = v end end newhash end end