Я создаю xml-документ из хэша. Атрибуты xml должны быть в порядке. Как это можно сделать?Заказ хеша на xml: Rails
hash.to_xml
Я создаю xml-документ из хэша. Атрибуты xml должны быть в порядке. Как это можно сделать?Заказ хеша на xml: Rails
hash.to_xml
В каком порядке вы хотели бы, чтобы они были? Вы не должны ожидать, что они будут в порядке ввода. Из docs for Hash:
Порядок, в котором вы пройти хэш либо ключ или значение может показаться произвольно, и, как правило, не может быть в порядке вставки .
Если вам нужно, чтобы они были в определенном порядке, вы можете определить только с помощью ключей/значений (например, упорядочить имена атрибутов в алфавитном порядке), вам необходимо будет применить этот порядок явно.
Обычные способы сортировки хэша - это ключ или значение. Посмотрите здесь:
Более сложные виды можно accomplised однако за счет использования оператору космического корабля
h = Hash[:x,123,:a,553,:d,949,:e,5321]
=> {:e=>5321, :x=>123, :a=>553, :d=>949}
h.sort { |x,y| x[0].to_s <=> y[0].to_s }
=> [[:a, 553], [:d, 949], [:e, 5321], [:x, 123]]
рубин 1.8 хеш не в порядке вставки. С ruby 1.9 они будут.
Однако рельсы предлагают альтернативу этому классу OrderedHash
.
my_hash = ActiveSupport::OrderedHash.new
my_hash[:key] = 'value'
my_hash[:second_key] = 'second value'
Этот хэш фактически массив этого формата:
[[:key, 'value'], [:second_key, 'second value']]
Записи остается в порядке, вставленный их.
И вы можете получить к ним доступ, как с любым другим хэшем.
Этот фрагмент кода, который я только что сделал для i18n-js, может помочь вам, поскольку он конвертирует Hash в ActiveSupport :: OrderedHash, если необходимо, а затем сортирует его по естественному порядку.
http://seb.box.re/2010/1/15/deep-hash-ordering-with-ruby-1-8
Пробовал это без везения. Он по-прежнему отображается случайным образом. Использование Ruby 1.8.7. – Jeffrey