2011-04-28 81 views
0

我有一个称为统计模型,其具有包含Goals值字段(一个自定义的类的)数据序列化的对象不被转换

class Statistic < ActiveRecord::Base 
    serialize :value 
end 

当我尝试访问goals_against(这些目标类的一个atr_reader )我得到

undefined method `goals_against' for #<String:0x54f8400> 

Value属性包含以下数据:

--- !ruby/object:Goals \ngoals: {}\n\ngoals_against: 1\ngoals_for: 0\nversion: 1\n 

根据调试器的字符串格式。

看来,rails不知道这个数据是Goals类型。

有人知道如何解决这个问题吗?

感谢

回答

1

三件事:

首先,在以往任何时候你的目标类别的定义,确保它被装载。在某些时候,Rails停止了自动加载lib文件夹中的东西。因此,如果您的额外类位于哪里,请将它们设置为config.autoload_paths(在config/application.rb中)。

其次,当您将列声明为序列化时,您可以选择指定类。当你使用自定义类并且你想确保Rails正确地进行转换时,这是特别有用的。

serialize :value, Goal 

第三,当你有一个序列化的列,确保你有足够的空间。换句话说,大多数情况下你希望这个列在你的模式中是“文本”而不​​是“字符串”(否则你的sql引擎会默默地截断任何太大而不适合字符串列的东西,你会最终保存一个破碎的物体)。

+0

感谢您的回复。我改变了serialize:value,Goals和现在获得的值应该是一个目标,但是是一个String – Tarscher 2011-04-28 14:08:24