我正在寻找关于序列化数据库中对象的一般指导。
答案 0 :(得分:53)
在计算机科学中,在数据存储和传输的上下文中,序列化是将数据结构或对象转换为位序列的过程,以便将其存储在文件,内存缓冲区或通过网络连接链接稍后将在相同或另一个计算机环境中“复活”。 (见http://en.wikipedia.org/wiki/Serialization)
所以序列化对象(在ActiveRecord的上下文中)是对象的文本/字符串表示(使用YAML编码)。序列化后,您可以将(几乎)任何Ruby对象保存在单个数据库字段中。
如果您需要保存在数据库中的某些复杂对象,并且不需要根据序列化属性的内容检索记录,则可以使用序列化。我使用它们来存储webapp用户的首选项:首选项基本上是我想要保存在单个数据库字段中的哈希值。
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)
真的很容易。查看doc的ActiveRecord::Base.serialize
。
答案 2 :(得分:2)
答案 3 :(得分:0)
如果你使用Rails 4和Postgresql,Rails 4支持hstore字段,它可以存储哈希并允许查询。 http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013