English 中文(简体)
Ordering a hash to xml: Rails
原标题:

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished?

hash.to_xml
问题回答

Ruby 1.8 s hash aren t in insertion order. With ruby 1.9, they will be.

However rails offers an alternative to that, the class OrderedHash.

my_hash = ActiveSupport::OrderedHash.new
my_hash[:key] =  value 
my_hash[:second_key] =  second value 

This hash is in fact an array of that format :

[[:key,  value ], [:second_key,  second value ]]

The entries remains in the order you inserted them.
And you can access them like with any other hash.

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]]

The usual ways of sorting a hash is by key or value. Have a look here:

hash.sort

More complex sorts can be accomplised however by utilizing the spaceship operator

What order did you want them to be in? You shouldn t expect them to be in insertion order. From the docs for Hash:

The order in which you traverse a hash by either key or value may seem arbitrary, and will generally not be in the insertion order.

If you need them to be in a specific order you can determine just from the keys/values (e.g. order the attribute names alphabetically), you ll need to apply that ordering explicitly.

This piece of code I ve just made for i18n-js might help you out as it convert Hash to ActiveSupport::OrderedHash if needed then sort it s key by natural order.

http://seb.box.re/2010/1/15/deep-hash-ordering-with-ruby-1-8





相关问题
rails collection_select vs. select

collection_select and select Rails helpers: Which one should I use? I can t see a difference in both ways. Both helpers take a collection and generates options tags inside a select tag. Is there a ...

SSL slowness in EC2

We ve deployed our rails app to EC2. In our setup, we have two proxies on small instances behind round-robin DNS. These run nginx load balancers for a dynamically growing and shrinking farm of web ...

Auth-code with A-Za-z0-9 to use in an URL parameter

As part of a web application I need an auth-code to pass as a URL parameter. I am currently using (in Rails) : Digest::SHA1.hexdigest((object_id + rand(255)).to_s) Which provides long strings like : ...

RubyCAS-Client question: Rails

I ve installed RubyCAS-Client version 2.1.0 as a plugin within a rails app. It s working, but I d like to remove the ?ticket= in the url. Is this possible?

activerecord has_many :through find with one sql call

I have a these 3 models: class User < ActiveRecord::Base has_many :permissions, :dependent => :destroy has_many :roles, :through => :permissions end class Permission < ActiveRecord::...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

Text Editor for Ruby-on-Rails

guys which text editor is good for Rubyonrails? i m using Windows and i was using E-Texteditor but its not free n its expired now can anyone plese tell me any free texteditor? n which one is best an ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签