【问题标题】:How to make an attribute transient (not marshalled)如何使属性瞬态(未编组)
【发布时间】:2012-07-03 18:05:20
【问题描述】:

我正在使用 Ruby 1.8.6 并且有一个我想使用 memcache-client 缓存的类(不是 ActiveRecord 类),它在将其存储到缓存。但是,它有一个我不想序列化的实例变量(它 确实 引用 ActiveRecord 类),因为我不希望对应于同一数据库行的多个对象运行。相反,我想在从缓存加载序列化对象并重新构建后,将属性设置为引用适当的对象(我已经引用了该对象)。

防止只有一个属性被编组的最简单方法是什么?

(我知道this question,但给出的答案似乎只适用于 ActiveRecord 类。)

【问题讨论】:

    标签: ruby marshalling


    【解决方案1】:

    来自http://www.ruby-doc.org/core-1.9.3/Marshal.html

    转储对象时,将调用方法 marshal_dump。 marshal_dump 必须返回包含必要信息的结果 用于 marshal_load 重构对象。结果可以是任何 对象。

    当加载使用 marshal_dump 转储的对象时,该对象是第一个 分配然后 marshal_load 被调用,结果来自 元帅转储。 marshal_load 必须从 结果中的信息。

    所以您链接的问题也适用于您。只需覆盖这两个方法,你应该没问题。

    【讨论】:

    • 好的,但是我如何获得一个包含所有属性值的散列(这样我就可以删除我不想要的那个)?我链接到的答案中提到的attributes 方法仅适用于 ActiveRecord 对象。
    • 您可以访问您班级的所有属性。你需要一个属性哈希做什么?
    • 所以我只需要把它们都列出来?
    • 你也可以使用一些元编程apidock.com/ruby/Object/instance_variables
    猜你喜欢
    • 1970-01-01
    • 2011-02-10
    • 2020-01-08
    • 2023-03-29
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多