【问题标题】:Ruby YAML serializationRuby YAML 序列化
【发布时间】:2012-09-09 02:12:00
【问题描述】:

我正在用

序列化一个 ruby​​ 对象
YAML::dump(obj) 

并将其存储在数据库中。 那我打个电话

myobj = YAML::load(obj)

我可以在调试中看到该对象已成功创建并且其字段已初始化。 但是当我尝试调用属性时,例如 myobj.name 之类的“名称”,我收到“无方法错误”消息。我做错了什么,如何正确反序列化对象?顺便说一句,我可以通过调用

访问对象的字段
myobj.instance_variable_get('@attributes')[:name]

谢谢。

【问题讨论】:

  • 只是带有字段的简单 ruby​​ 类
  • 很抱歉,我无法发布我班级的完整代码,因为所有代码都在 NDA(

标签: ruby serialization yaml


【解决方案1】:

你确定你的对象有方法name吗?

你可以试试

YAML::dump(obj) 
p obj.name

可以肯定的是,您存储的对象确实有一个方法name

你的

myobj.instance_variable_get('@attributes')[:name]

并不表示存在name 的方法或属性。只有一个属性@attributes,支持方法[](可能是哈希)。

也许你可以使用

myobj.attributes[:name]

但没有更多信息,这一切都只是猜测。

【讨论】:

  • myobj.attributes 和 p obj.name 返回未定义的方法属性和未定义的方法名称,因为我认为 myobj 不是 AR 对象,只是一个类。在我的类中,我有 class MyClass ATTRIBUTES_KEYS = %w (身份证姓名姓氏)
  • 当您使用ATTRIBUTES_KEYS 定义属性时 - 您是否还定义了访问器方法?
  • @Marat_Galiev:所以p obj.name 会告诉你问题,我的回答就是解决方案——所以你可以接受我的回答。
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2010-09-19
  • 2010-12-10
  • 2020-11-06
相关资源
最近更新 更多