2011-08-01 1 views
1

Rong 3.0.9에서 MongoMapper 0.9.1을 사용하고 있으며 DB에 사용자 정의 클래스의 객체를 저장하려고하면 다음과 같은 오류가 발생합니다 :MongoMapper로 사용자 정의 클래스를 저장하는 레일 : BSON으로 객체를 직렬화 할 수 없습니다.

BSON :: InvalidDocument (BSON로 클래스 서명의 객체를 직렬화 할 수 없습니다.)

내 응용 프로그램에서 문서에 서명 할 수 있도록하고 이러한 서명은 사용자 정의 클래스에 저장해야합니다. 나는 to_mongo 또는 from_mongo 방법을 주석 경우

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 
    # ... 

상관없이, 그것은 항상 내가 테스트 할 때 위의 인용에서 예외가 발생합니다 : 나는 단순히 그것을 저장하려고하는 문서 급 전에 서명 클래스 선언 그것 컨트롤러에서 호출하여

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

내 경우에는 작동하지 않습니다. 누구든지 아이디어를 얻은 경우 당신이 나를 도와 준다면 정말 좋을 것입니다. 대단히 감사드립니다!

종류와 관련, 세바스찬

답변

4

핵심 요구 사항이 명시 적으로 서명 유형으로 선언 할 :

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

가 대단히 감사합니다,이 작품! 과거에는 키를 선언하지 않았습니다. 저장하려는 속성이 동적이기 때문입니다. 내가 필요한 모든 것을 단순히 '자기. 속성'이라고 선언했다. 여전히 동적 인 키를 설정할 수 있으려면 각 속성에 대해'self.class.key attributename, Signature'를 호출하고 있습니다. 이것은 꽤 벽을 작동합니다. 다시 한 번 감사드립니다! (: – YMMD