2

国コードを含む国名のハッシュデータ構造から、Ruby on Rails で json 応答をレンダリングできません: { "AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=> "Algeria", ... } と入力すると、json 応答のエントリが次のようにアルファベット順に並べられます。

{ "AF":"アフガニスタン", "AL":"アルバニア", "DZ"=>"アルジェリア" ... }

問題は、私の理解では、ルビー ハッシュ自体に順序の概念がないことです。したがって、応答は完全にランダムです。

助けてくれてありがとう!

マーティン

4

3 に答える 3

4

使用できますActiveSupport::OrderedHash

サンプルケース:

hash = ActiveSupport::OrderedHash.new
hash["one"] = "one"
hash["two"] = "two"
hash["three"] = "three"
p hash            # Will give you the hash in reverse order
p hash.to_json    # Will give you a json with the ordered hash
于 2010-02-10T02:49:05.570 に答える
0

以前の回答(-> westoque)のおかげで、私は最終的に次のようにrailsinitializersフォルダーのハッシュクラスにモンキーパッチを適用しました。

class Hash
 def to_inverted_ordered_hash
  copy = self.dup.invert.sort
  copy.inject(ActiveSupport::OrderedHash.new) {|hash, i|  hash[i[1]] =  i[0]; hash}
 end

 def to_ordered_hash
  copy = self.dup.sort
  copy.inject(ActiveSupport::OrderedHash.new) {|hash, i|  hash[i[1]] =  i[0]; hash}
 end
end

コントローラからレンダリングされるときにto_jsonが呼び出されます。どうもありがとう!

于 2010-02-10T04:41:49.650 に答える
0

次のようなハッシュの配列はどうですか。

[{ "AF"=>"Afghanistan"}, {"AL"=>"Albania"}, {"DZ"=>"Algeria"}, ... ]
于 2010-02-10T02:42:38.997 に答える