【发布时间】:2010-01-25 18:22:00
【问题描述】:
我有一个应该存储 id、名称和哈希的表。如何序列化哈希? (我使用 Ruby 和 Sequel 作为 ORM。)
【问题讨论】:
我有一个应该存储 id、名称和哈希的表。如何序列化哈希? (我使用 Ruby 和 Sequel 作为 ORM。)
【问题讨论】:
如果您使用的是 Sequel::Model,Serialization plugin 应该可以解决问题。
【讨论】:
您似乎已经找到了足够的答案,但我认为我应该使用通用的 Ruby 方式。
# outside of rails you'll need this
require 'base64'
# encode
h = { :first => "John", :age => 23 }
encoded = Base64.encode64(Marshal.dump(h))
# decode
h = Marshal.load(Base64.decode64(encoded))
我使用它来序列化 Ruby 对象(例如,通过 JSON 和数据库),您会发现 Rails 中的 cookie 会话以相同的方式对会话哈希进行编码。使用它从浏览器 cookie 调试会话内容通常很方便。
【讨论】:
如果您正在寻找JSON-API 的合规性,我很幸运能找到JSONAPI::Serializers。您需要传入:skip_collection_check 选项,并且为了提高性能,您应该1) 传入结果集,而不是数据集,以及2) 在序列化之前急切加载关系(如果您正在旁加载数据)。
【讨论】:
你可以试试 YAML:
require 'yaml'
# encode
my_hash = { :first => "John", :age => 23 }
encoded = YAML.dump(my_hash)
# decode
my_hash = YAML.load(encoded)
您可以将它存储在 Sequel String 中,它适用于复杂的对象,并且在 DB 中是可读的。我读到了here。
【讨论】: