1

私はRuby1.8.6を使用しており、キャッシュに保存する前にシリアル化するmemcache-clientを使用してキャッシュしたいクラス(ActiveRecordクラスではない)があります。ただし、同じデータベース行に対応する複数のオブジェクトを実行したくないため、シリアル化したくないインスタンス変数(ActiveRecordクラスを参照します)がありますMarshal.dump。代わりに、シリアル化されたオブジェクトがキャッシュからロードされて再構築された後、適切なオブジェクト(すでに参照している)を参照するように属性を設定したいと思います。

1つの属性のみがマーシャリングされるのを防ぐ最も簡単な方法は何ですか?

(私はこの質問を知っていますが、与えられた答えはActiveRecordクラスにのみ適用されるようです。)

4

1 に答える 1

2

http://www.ruby-doc.org/core-1.9.3/Marshal.htmlから

オブジェクトをダンプすると、メソッドmarshal_dumpが呼び出されます。marshal_dumpは、marshal_loadがオブジェクトを再構成するために必要な情報を含む結果を返す必要があります。結果は任意のオブジェクトになります。

marshal_dumpを使用してダンプされたオブジェクトをロードする場合、オブジェクトが最初に割り当てられ、次にmarshal_loadが呼び出され、marshal_dumpの結果が返されます。marshal_loadは、結果の情報からオブジェクトを再作成する必要があります。

したがって、リンク先の質問はあなたにも当てはまります。これらの2つのメソッドをオーバーライドするだけで、問題はありません。

于 2012-07-03T18:13:39.063 に答える