序列化的对象不被转换
问题描述:
我有一个称为统计模型,其具有包含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
类型。
有人知道如何解决这个问题吗?
感谢
答
三件事:
首先,在以往任何时候你的目标类别的定义,确保它被装载。在某些时候,Rails停止了自动加载lib文件夹中的东西。因此,如果您的额外类位于哪里,请将它们设置为config.autoload_paths(在config/application.rb中)。
其次,当您将列声明为序列化时,您可以选择指定类。当你使用自定义类并且你想确保Rails正确地进行转换时,这是特别有用的。
serialize :value, Goal
第三,当你有一个序列化的列,确保你有足够的空间。换句话说,大多数情况下你希望这个列在你的模式中是“文本”而不是“字符串”(否则你的sql引擎会默默地截断任何太大而不适合字符串列的东西,你会最终保存一个破碎的物体)。
感谢您的回复。我改变了serialize:value,Goals和现在获得的值应该是一个目标,但是是一个String – Tarscher 2011-04-28 14:08:24