【问题标题】:Serialize and deserialize序列化和反序列化
【发布时间】:2012-03-17 09:27:12
【问题描述】:

我有一个带有嵌入样本的活动记录类:

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。

任何想法如何序列化和反序列化这个对象?

【问题讨论】:

    标签: serialization activerecord yaml psych


    【解决方案1】:

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

    serialize :sample, SampleSerializer.new

    其中 SampleSerializer 是一个定义“加载”和“转储”方法的类。

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

    【讨论】: