2014-11-01 3 views
0

Я сейчас работаю над Padrino с помощью CouchDB бэкэнд. Мне нужно иметь модель для хранения json, кроме некоторых общих строк. Модель выглядит (в псевдокоде):Хранение объекта json в Padrino CouchDB model

name: 'UniqueName', 
properties: { prop1: val1, prop2: val2 } 

Я не могу предсказать, сколько значения которых типы должны быть сохранены в properties. В настоящее время я использую общую модель:

padrino g model MyModel name:string, properties:string 

Перед сохранением свойств я строю json; при загрузке я создаю json из строки. Я чувствую, что я поступаю неправильно. Поскольку CouchDB готов хранить объекты json как есть, интересно, есть ли способ сказать модели Падрино, что последнее поле - json для его хранения изначально? Как:

name: 'UniqueName', 
properies: 
    - prop1: val1, 
    - prop2: val2 

Я вижу, что я мог бы создать отдельную коллекцию и передать его _idMyModel из, но в данный момент я хочу, чтобы хранить его вместе с его name. Является ли это возможным?

ответ

0

Нет необходимости строгать json, просто проанализировать его и сохранить в виде массива с использованием стандартной библиотеки JSON.

original JSON data example: 
json_data = [{ prop1: val1, prop2: val2, prop3: val3 }] #store the JSON data from wherever it came 
parsed = JSON.parse(json_data.to_json) #store the parsed JSON data into an Array 

foo = MyModel.find(1) #find whatever collection you wanna update 
foo.properties = parsed 
# => [{ prop1: val1, prop2: val2, prop3: val3 }] 
foo.save 

Ваш MyModel должен тогда выглядеть следующим образом:

{ 
    "_id" : "your_generated_id", 
    "_rev" : "your_generated_rev", 
    "name" : "UniqueName", 
    "properties" : [ 
     { 
      prop1: val1, 
      prop2: val2, 
      prop3: val3 
     } 
    ] 
} 

Запомнить CouchDB является "schemaless". Подробнее here.

+0

Я вижу CouchDB схематично. Остается только вопрос: как я описал миграцию, например? модель padrino/rails? Миграция, скорее всего, будет независимой от ORM, и я хочу сохранить ее. – mudasobwa

+0

Падрино использует [CouchRest ORM] (https://github.com/couchrest/couchrest), чтобы поговорить с CouchDB. То, что вы пытаетесь сделать, - это то, что называется Casting. См. Раздел [CouchRest - Property Arrays] (http://www.couchrest.info/model/properties.html) в Свойствах модели. Также см. Документацию [CouchRest_ExtendDocument] (https://github.com/couchrest/couchrest_extended_document#general). Поэтому, чтобы ответить на ваш вопрос, модель/миграция будет 'property: properties, [String]' – Besto

+1

Спасибо, он отвечает на вопрос. – mudasobwa

Смежные вопросы