我正在我的 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)
的天真方法似乎并没有将它与所有外键和东西联系起来。
最佳答案
经过一些“有趣”的代码探索后,我似乎找到了一些可行的方法:
mc.set(key, HashWithIndifferentAccess[o.attributes])
as_hash = mc.get(key)
from_cache = Foo.load([as_hash], Foo.all.query).first
load
模型上的方法似乎是 get 使用的和 query
为了获得存储库名称和其他一些东西,似乎是必需的。
关于ruby-on-rails - Rails 中 DataMapper 对象的替代序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795201/