2011-08-01 7 views
1

MongoMapper 0.9.1をRails 3.0.9で使用しています。カスタムクラスのオブジェクトをDBに保存しようとすると次のエラーが発生します。 :MongoMapperでカスタムクラスを保存しているレール:BSONにオブジェクトをシリアル化できません

BSON :: InvalidDocument(BSONにクラス署名のオブジェクトをシリアル化することはできません。)

私のアプリケーションは、文書に署名するために、ユーザーが有効になりますし、これらのシグネチャは、カスタムクラスに保存する必要があります。私は単にそれを保存しようとしているドキュメントクラスの前に署名クラスを宣言した:

class Signature 
    @value 
    @date 
    @user 
    def self.to_mongo(value) 
     value.to_a 
    end 
    def self.from_mongo(value) 
     Signature.new(value || []) 
    end 
end 

class Doc 
    # ... 

どんなに私がto_mongoまたはfrom_mongoメソッドをコメントアウトする場合、私はテストしたいとき、それは常に上に引用された例外をスローコントローラから呼び出すことによってそれを呼び出すことによって

doc = Doc.new {:signature => Signature.new} 

私はなぜ私の場合にはうまくいかないのか分かりません。あなたの誰かがアイデアを持っているなら、あなたが私を助けてくれたら素晴らしいだろう。事前にどうもありがとうございました!

敬具、 セバスチャン

答えて

4

あなたのキーの必要性を明示的に署名型として宣言する:

class Doc 
    include MongoMapper::Document 
    key :signature, Signature 
end 
+0

はこの作品、どうもありがとうございました!過去に私はキーを宣言しなかった。なぜなら、保存したい属性は動的なものだからだ。私が必要としていたすべては、単に「自己.attributename」と宣言しました。動的キーを設定できるようにするために、私は今、それぞれの属性に対して 'self.class.key attributename、Signature'を呼び出しています。これはかわいい壁の作品です。再度、感謝します! (: – YMMD

関連する問題