序列化对象未被转换

时间:2011-04-28 09:30:20

标签: ruby-on-rails-3 activerecord

我有一个名为statistics的模型,它有一个包含Goals(自定义类)数据的值字段

class Statistic < ActiveRecord::Base
  serialize  :value
end

当我尝试访问goals_against(Goals类的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 个答案:

答案 0 :(得分:1)

三件事:

首先,在定义Goal类的地方,确保它已加载。在某些时候,Rails停止在lib文件夹中自动加载东西。因此,无论您的额外类位于何处,请将它们设置在config.autoload_paths中(在config / application.rb中)。

其次,当您将列声明为序列化时,您可以选择指定该类。当您使用自定义类并且希望确保Rails正确执行转换时,这尤其有用。

serialize :value, Goal

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