Rails:序列化数据库中的对象?

时间:2010-06-02 16:34:36

标签: ruby-on-rails ruby serialization model object

我正在寻找关于序列化数据库中对象的一般指导。

  1. 什么是序列化对象?
  2. 在数据库中序列化对象有哪些最佳实践方案?
  3. 在数据库中创建列时,您使用了哪些属性,以便可以使用序列化对象?
  4. 如何保存序列化对象?
  5. 以及如何访问序列化对象及其属性? (使用哈希?)

4 个答案:

答案 0 :(得分:53)

  

在计算机科学中,在数据存储和传输的上下文中,序列化是将数据结构或对象转换为位序列的过程,以便将其存储在文件,内存缓冲区或通过网络连接链接稍后将在相同或另一个计算机环境中“复活”。   (见http://en.wikipedia.org/wiki/Serialization

  1. 所以序列化对象(在ActiveRecord的上下文中)是对象的文本/字符串表示(使用YAML编码)。序列化后,您可以将(几乎)任何Ruby对象保存在单个数据库字段中。

  2. 如果您需要保存在数据库中的某些复杂对象,并且不需要根据序列化属性的内容检索记录,则可以使用序列化。我使用它们来存储webapp用户的首选项:首选项基本上是我想要保存在单个数据库字段中的哈希值。

  3. 3./4./5。使用ActiveRecord::Base.serialize作为Marc-AndréLafortune建议:

    class User < ActiveRecord::Base
      serialize :preferences
    end
    
    u = User.new
    u.preferences = {:show_tooltips => true, :use_extended_menu => false, ...}
    u.save
    
    # ...
    
    u = User.find(23)
    u.preferences # => {:show_tooltips => true, :use_extended_menu => false, ...}
    

答案 1 :(得分:8)

真的很容易。查看docActiveRecord::Base.serialize

答案 2 :(得分:2)

查看MessagePack

答案 3 :(得分:0)

如果你使用Rails 4和Postgresql,Rails 4支持hstore字段,它可以存储哈希并允许查询。 http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013