【问题标题】:activerecord-postgres-hstore after save error ordering in Hash在哈希中保存错误排序后的 activerecord-postgres-hstore
【发布时间】:2013-01-31 01:36:06
【问题描述】:

使用 Hstore 存储为 Hash Table,保存后 Hash 中的排序错误

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

是不是因为序列化后它是按树排序的。有任何想法或任何人以前遇到过这个问题吗?提前致谢。

【问题讨论】:

    标签: ruby-on-rails postgresql serialization rails-activerecord hstore


    【解决方案1】:

    来自fine PostgreSQL manual

    F.16。 hstore
    [...]
    该模块实现了 hstore 数据类型,用于在单个 PostgreSQL 值中存储键/值对集。
    [...]
    对的顺序并不重要(并且可能不会在输出中重现)。

    所以 PostgreSQL 的 hstore 类型是一组无序的键/值对,它不保证键/值对的任何特定顺序。一旦您的 Ruby Hash 转换为 hstore,排序就会丢失。

    如果您需要维护哈希中的顺序,则必须使用不同的序列化格式。

    【讨论】:

    • 我试图使用 Hstore 来存储我正在创建的 csv 的自定义标题/值。然而,在阅读完这篇文章后,我决定将它们存储在 2 个单独的数组中。
    猜你喜欢
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2012-09-08
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多