x = {:name => "John", :data => {:physical => {:age => 25, :weight => 150}}}

我希望将数据的子属性上移一层(但不一定只是简单地展平所有属性)。在这种情况下,我基本上想将 :physical 属性“上移”一级。

我正在尝试这个
y = x[:data']
y.each{ |key| x[key] = y[key] }

但我得到...
x = x.except(:data)
 => {:name=>"John", [:physical, {:age=>25, :weight=>150}]=>nil}

我在找...
 => {:name=>"John", :physical => {:age=>25, :weight=>150}}

最佳答案

试试这个:

x = x.merge(x.delete(:data))

10-08 14:14