Я работаю над уровнем кэширования в своем приложении Rails, и у меня возникают проблемы с кэшированием оригинальных объектов DataMapper. Кажется, к ним прикреплено много вещей, которые приводят к сбою маршалинга (я получаю сообщение о том, что Marshal не может сериализовать объект Proc).
Итак, я рассматриваю возможность написания собственных методов предварительной сериализации и последующей десериализации для кэширования. В частности, я превращу объект DataMapper в список кортежей со следующим:
o = Foo.get(1234)
as_list = o.model.properties.map { |p| [p.name, o.send(p.name)] }
А затем кешировать этот список.
У меня такой вопрос: как мне реконструировать объект DataMapper таким образом, чтобы я мог использовать его так, как если бы он был создан с помощью обычного запроса DataMapper?
Мой наивный подход Foo.new(foo=bar, goo=baz)
, похоже, не связывает его со всеми внешними ключами и прочим.