Ruby on rails 3 -序列化对象没有被转换



我有一个叫做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: {}nngoals_against: 1ngoals_for: 0nversion: 1n

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

似乎rails不知道这个数据是Goals类型的。

有人知道怎么解决这个问题吗?

谢谢

三件事:

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

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

serialize :value, Goal

第三,当您有一个序列化的列时,请确保有足够的空间容纳它。换句话说,大多数情况下,您希望该列在模式中是"文本"而不是"字符串"(否则sql引擎将默默地截断任何太大而无法容纳字符串列的内容,并且您最终将保存一个损坏的对象)。

相关内容

  • 没有找到相关文章

最新更新