Внедренный в Mongomapper документ ошибка «Невозможно сериализовать объект» - PullRequest
1 голос
/ 22 ноября 2011

Я новичок в mongodb и использую sinatra и 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 Ответ

1 голос
/ 22 ноября 2011

Это похоже на работу

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 не работает, так как я бы предположил, что он делает то же самое, что и <<.

...