2013-11-28 55 views
1

我有一个序列化问题。 在我的模型我有Rails并不反序列化阵列

class PramEntry < ActiveRecord::Base 
    serialize :pram_units_array, Array 
    attr_accessible :pram_units_array 
end 

然后我做

entry = PramEntry.new 
entry.pram_units_array = [PramUnit.new(depth: 1, width: 1)] 

entry.pram_units_array 
=> [#<PramUnit:0x007fb368eb8ae8 @depth=1, @width=1>] 
entry.save 
=> true 

但后来我从数据库

entry = PramEntry.first 
entry.pram_units_array 
=> "---\n- &70364639756800 !ruby/object:PramUnit\n depth: 1\n width: 1\n errors: !ruby/object:ActiveModel::Errors\n base: *70364639756800\n messages: !omap []\n validation_context: \n" 

加载这个对象时,它不会从YAML序列化回来。我做错了什么?提前致谢!

回答

1

我找到了回答我的问题。

我试图反序列化manualy

YAML::load(PramEntry.last.pram_units_array) 
=> ArgumentError: undefined class/module PramUnit 

PramUnit是在lib文件夹Ruby类。我需要它

require 'pram_unit' 

即使当我从lib自动加载文件。

config.autoload_paths += Dir["#{config.root}/lib/**/"] 

这对我来说是非常奇怪的行为。但问题解决了:)