Динамический EmbeddedDocument MongoMapper с пользовательскими данными

У меня есть модель 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 — это что-то случайное, что может предоставить пользователь приложения.


person Rui Jiang    schedule 14.11.2011    source источник


Ответы (1)


Конечно. Вам не нужно прибегать к драйверу 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
person Brian Hempel    schedule 14.11.2011