Да:
animal_food['treats'].merge!({'time_eaten' => time})
делает то же самое, что и эти две строки. (Обратите внимание на восклицательный знак.) Вы также можете сказать
animal_food['treats'].tap { |treats| treats['time_eaten'] = time }
Или, в Ruby 2.7 превью, используя пронумерованные параметры:
animal_food['treats'].tap { @1['time_eaten'] = time }