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

Как я могу указать свои внутренние объекты в методе атрибутов, чтобы этого не произошло?


person Tino    schedule 22.11.2016    source источник


Ответы (1)


Функция as_json особенная, она возвращает то, что должно быть в структуре JSON, но на самом деле не возвращает JSON.

Что вы хотите, так это:

JSON.parse(instance.to_json)

Посмотрите, что излучает as_json.

person tadman    schedule 22.11.2016