MongoMapper динамический EmbeddedDocument с пользовательскими данными пользователя - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть модель MongoMapper с именем LogInfo, в которой уже определено несколько полей (: user_id,: user_key,: message и т. Д.)

Однако я также хотел бы, чтобы пользователь встраивал свои собственные объекты JSON в качестве EmbeddedDocument.

Есть ли способ использовать анонимные объекты для создания пользовательских объектов в MongoMapper? Должен ли я вместо этого прибегнуть к родному драйверу Ruby? Конечный объект будет выглядеть примерно так:

{
    user_id: 393,
    user_key: "kdIekHG32Je",
    message: "Application error",
    custom_data: {
        browser: "Firefox 8.0",
        location: {
             lat: 34.323,
             lon: -14.091
        }
    }
}

где поле custom_data - это нечто случайное, которое может предоставить пользователь приложения.

1 Ответ

0 голосов
/ 14 ноября 2011

Конечно. Вам не нужно прибегать к драйверу Ruby.

MongoMapper превращает объекты в представление MongoDB, вызывая:

ObjectClass.to_mongo(object_instance)

Метод to_mongo уже определен для нескольких стандартных классов, и вы можете определить его и для своих собственных классов. См. lib / mongo_mapper / extensions для всех классов, которые определены to_mongo и http://mongomapper.com/documentation/types.html для документации по пользовательским типам.

НО, если вы довольны тем, что ваши пользователи просто передают вам хэш, это сработает.

class LogEntry
  include MongoMapper::Document
  key :custom_data, Hash
end
...