Hash.collect displaying in wrong order in view helper

I have this helper method in my application_helper, for some reason it
doesn’t output in the correct order:

def view_by_options(active)
html = “View The List by:  "
html +={ :popular => ‘Most Popular’, :new => “Newest”, :recommended
=>
“Recommended”}.collect do |key,val|
link_to_unless (key.to_s == active, val, params.merge(:viewBy =>
key))
end.join(”,")
html
end

resulting html always has ‘newest, most popular, then recommended’, not
‘most popular, newest, recommended’.

When I run similar code in the console it works fine…any ideas?

http://corelib.rubyonrails.org/classes/Hash.html

Hashes are unordered. If you want reliable ordering, you will need to
use an Array.

  • Gabriel