如何在Ruby属性方法中包含对象(ActiveModel :: Serialization)?

时间:2016-11-22 02:07:06

标签: ruby-on-rails json ruby active-model-serializers

我有一个想要序列化为JSON的对象,我试图使用ActiveModel :: Serialization :: JSON模块来实现这一目标。我的属性方法看起来像这样:

class MyClass
include ActiveModel::Serializers::JSON

def attributes
{
  'attr1' => nil,
  'attr2' => nil,
  'object1' => nil,
  'object2' => nil
}
end

这一切正常,直到我尝试运行JSON.parse(myclass_instance.as_json.to_s);我得到与MyClass中的内部对象相关的错误:

JSON::ParserError: 757: unexpected token at '{"object1"=>#<MyClass::object1_field1>...}'

如何在attributes方法中指定我的内部对象,以免发生这种情况?

1 个答案:

答案 0 :(得分:1)

as_json函数是特殊的,它返回在 JSON结构中的内容,但它实际上并不返回JSON。

你想要的是这个:

JSON.parse(instance.to_json)

查看as_json发出的内容。