Как включить объект в метод атрибутов Ruby (ActiveModel::Serialization)?
У меня есть объект, который я хотел бы сериализовать в 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>...}'
Как я могу указать свои внутренние объекты в методе атрибутов, чтобы этого не произошло?
1 ответ
Решение
as_json
Функция особенная, она возвращает то, что должно быть в структуре JSON, но фактически не возвращает JSON.
То, что вы хотите, это:
JSON.parse(instance.to_json)
Посмотрите на что as_json
излучает.