Как включить объект в метод атрибутов 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 излучает.

Другие вопросы по тегам