【问题标题】:How do I serialize data with Sequel and Ruby?如何使用 Sequel 和 Ruby 序列化数据?
【发布时间】:2010-01-25 18:22:00
【问题描述】:

我有一个应该存储 id、名称和哈希的表。如何序列化哈希? (我使用 Ruby 和 Sequel 作为 ORM。)

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    如果您使用的是 Sequel::Model,Serialization plugin 应该可以解决问题。

    【讨论】:

    【解决方案2】:

    您似乎已经找到了足够的答案,但我认为我应该使用通用的 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 调试会话内容通常很方便。

    【讨论】:

    • Sequel 序列化插件的工作方式相同。您可以决定是否要使用 Marshal、Yaml 或 Json 来序列化和反序列化您的数据。但谢谢你的提示。 ;)
    【解决方案3】:

    如果您正在寻找JSON-API 的合规性,我很幸运能找到JSONAPI::Serializers。您需要传入:skip_collection_check 选项,并且为了提高性能,您应该1) 传入结果集,而不是数据集,以及2) 在序列化之前急切加载关系(如果您正在旁加载数据)。

    【讨论】:

      【解决方案4】:

      你可以试试 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-26
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多