Ruby не создает копию этого хэша при добавлении его в массив - он просто сохраняет ссылку на исходную переменную.Итак, когда вы очищаете исходную переменную, ссылка, хранящаяся в массиве, теперь ссылается на пустой хеш.
Если вы хотите скопировать элемент хеша, чтобы этого не произошло, используйте метод clone
Руби.
ruby-1.9.2-p136 :049 > h = { :test => 'foo' }
=> {:test=>"foo"}
ruby-1.9.2-p136 :050 > a = []
=> []
ruby-1.9.2-p136 :051 > a << h.clone
=> [{:test=>"foo"}]
ruby-1.9.2-p136 :052 > h.clear
=> {}
ruby-1.9.2-p136 :053 > a
=> [{:test=>"foo"}]