ruby-on-rails - Rails 中 DataMapper 对象的替代序列化

标签 ruby-on-rails caching serialization datamapper

我正在我的 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/

相关文章:

c++ - 为什么添加填充可以让你的循环更快?

iis - URL 大小写敏感导致缓存问题!有没有快速修复标题?

java - 反序列化操作请求消息正文时出现 JAX-WS 错误

c# - 如何使用 Protobuf.net C# 序列化自定义对象的基本属性

ruby-on-rails - Rails 搜索表单中的 x, y 查询参数

ruby-on-rails - 如何在rails中获取对象的模型名称?

ruby-on-rails - Rails : Using . 对连接的引用,即使它不是必需的

ruby-on-rails - 如何为 Rails 4.1 枚举编写 i18n 字符串?

caching - D 中内存函数的纯度

c# - RestSharp序列化JSON数组请求参数