2011-11-22 3 views
1

나는 MongoDB를 아주 새로운 그리고 난은이 설정 다음에 포함 된 문서의 값을 업데이트시나와 mongomapper을 사용하고 있습니다 :Mongomapper 포함 된 문서 "객체를 직렬화 할 수 없습니다"오류

class TeamMember 
    include MongoMapper::Document 

    key :name, String, :required => true 

    many :team_member_projects 
end 

class TeamMemberProject 
    include MongoMapper::EmbeddedDocument 

    key :date, Date, :required => true 

    one :project 
end 

class Project 
    include MongoMapper::Document 

    key :name, String, :required => true 
end 

수정 코드는 다음과 같습니다

team_member = TeamMember.find(params[:team_member]) 
project = Project.find(params[:project]) 
date = Date.parse(params[:date]) 

tm_project = TeamMemberProject.new(:project => project, :date => date) 
team_member.push(:team_member_projects => tm_project) 
team_member.save 

하지만 .push 라인에 대한 오류를 얻을 :

BSON::InvalidDocument at /project/add 
Cannot serialize an object of class TeamMemberProject into BSON. 

내 내장 문서를 올바르게 선언하지 않았습니까? 또는 임베디드 된 문서를 업데이트하는 다른 방법이 있을지 모르겠습니다. 내가 사용하려고 해요 : http://mongomapper.com/documentation/plugins/modifiers.html#push

답변

1

team_member = TeamMember.find(params[:team_member]) 
project = Project.find(params[:project]) 
date = Date.parse(params[:date]) 

tm_project = TeamMemberProject.new(:project_id => project.id, :date => date) 
team_member.team_member_projects << tm_project 
team_member.save 

을 작동하는 것 같다 내가 project.id를 사용해야 할 것 같다. 이유를 모르겠다. 또한 내 .push이 작동하지 않는 이유를 모르겠다. 나는 <<과 같은 일을한다고 가정했을 것이다.

+0

나는 똑같은 것을 발견했습니다 ... 버그 일 수 있습니다. 나는 그 프로젝트에 대해 github을보고하고 그들이 말하는 것을 보게 될 것이다. –

+0

버그인지 확실하지 않습니다. 수식어는 MongoDB 수식어를 둘러싼 단순하고 편리한 래퍼입니다. 수식어는 루비에서 관련 문서를 업데이트하지도 않고 곧바로 데이터베이스로 이동합니다. 그래서, ".push"는 MongoMapper 협회에 대해 알지 못할 것입니다. 'team_member.push (: team_member_projects => tm_project.to_mongo)'가 작동 할 수도 있습니다. –

관련 문제