2

Hstore を使用したハッシュ テーブルとして保存、保存後のハッシュの順序が間違っている

class Service < ActiveRecord::Base
  serialize :properties, ActiveRecord::Coders::Hstore
end

service = Service.new
service.properties = { "aaa" => 1, "zz" => 2, "cc" => 3, "d" => 4 }
#=> { "aaa" => 1, "zz" => 2, "cc" => 3, "d" => 4 }
service.save
reload!
service = Service.find(:id)
service.properties
#=> { "d" => "4", "cc" => "3", "zz" => 2, "aaa" => 1 }
Bug::: wrong ordering after save

Treeでオーダーするのは連載後だからでしょうか。アイデアや誰かが以前にこの問題に直面したことはありますか? 前もって感謝します。

4

1 に答える 1

4

細かい PostgreSQL マニュアルから:

F.16。hstore
[...]
このモジュールは、単一の PostgreSQL 値内にキーと値のペアのセットを格納するための hstore データ型を実装します。
[...]
ペアの順序は重要ではありません (出力で再現されない場合があります)。

したがって、PostgreSQL の hstore 型は、キーと値のペアの特定の順序を保証しないキーと値のペアの順序付けられていないセットです。Ruby Hash が hstore に変換されると、順序が失われます。

ハッシュの順序を維持する必要がある場合は、別のシリアル化形式を使用する必要があります。

于 2013-02-15T05:29:37.870 に答える