Rails, хранящий пользовательский класс с MongoMapper: невозможно сериализовать объект в BSON - PullRequest
1 голос
/ 01 августа 2011

Я использую MongoMapper 0.9.1 в Rails 3.0.9, и при попытке сохранить объект пользовательского класса в БД выдает следующую ошибку:

BSON :: InvalidDocument (Невозможно сериализовать объект класса Signature в BSON.)

Мое приложение позволит пользователям подписывать документы, и эти подписи должны быть сохранены в пользовательском классе. Я просто объявил класс Signature перед классом Doc, который собирается его хранить:

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}

Понятия не имею, почему это не сработает в моем случае. Если у кого-то из вас есть идея, было бы здорово, если бы вы мне помогли. Заранее большое спасибо!

С уважением, Себастьян

1 Ответ

4 голосов
/ 02 августа 2011

Ваш ключ должен быть явно объявлен как тип подписи:

class Doc
  include MongoMapper::Document
  key :signature, Signature
end
...