我有一个叫做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引擎将默默地截断任何太大而无法容纳字符串列的内容,并且您最终将保存一个损坏的对象)。