序列化和反序列化

时间:2012-02-27 21:56:33

标签: serialization activerecord yaml psych

我有一个带有嵌入式示例的活动记录类:

class LabResults < ActiveRecord::Base
  serialize :sample
end

class Sample
  attr_accessor :values    # GSL::Vector of responses

  def to_yaml
    YAML.quick_emit( self, opts ) { |out|
      out.map( "!testfile,2012-02-27" ) { |map|
        @values.map{|v| v.to_a }
      }
    }
  end

  def analyze; end;    # do stuff with values
end

我想在数据库中序列化和存储样本,但是GSL :: Vector(来自gsl gem)没有to_yaml方法。当使用Rails 3.2的默认YAML引擎Psych时,显然不推荐为Sample定义to_yaml和YAML.quick_emit。

如何序列化和反序列化此对象的任何想法?

1 个答案:

答案 0 :(得分:0)

您可以为列编写自定义(de)序列化程序,并将其作为第二个参数传递给“serialize”,例如:

serialize :sample, SampleSerializer.new

其中SampleSerializer是一个定义“load”和“dump”方法的类。

此答案中的更多详细信息:ActiveRecord serialize using JSON instead of YAML