我有一个名为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
类型。
有人知道如何解决这个问题吗?
由于
答案 0 :(得分:1)
三件事:
首先,在定义Goal类的地方,确保它已加载。在某些时候,Rails停止在lib文件夹中自动加载东西。因此,无论您的额外类位于何处,请将它们设置在config.autoload_paths中(在config / application.rb中)。
其次,当您将列声明为序列化时,您可以选择指定该类。当您使用自定义类并且希望确保Rails正确执行转换时,这尤其有用。
serialize :value, Goal
第三,当您有一个序列化的列时,请确保您有足够的空间。换句话说,大多数情况下,您希望该列在模式中是“文本”而不是“字符串”(否则您的sql引擎将默默地截断任何太大而不适合字符串列的内容,您将会最终保存一个破碎的物体。)