2014-11-01 124 views
0

我目前正在Padrino应用程序与CouchDB后端。除了一些一般的字符串外,我需要有一个模型来存储json。这个模型看起来像(伪代码):存储json对象Padrino CouchDB模型

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

我无法预测这多少值类型存储在properties。目前我使用的通用模型:

padrino g model MyModel name:string, properties:string 

在存储属性之前,我将json stringify;加载时,我从字符串创建json。我觉得我做错了。由于CouchDB已经准备好存储json对象,我不知道是否有办法告诉Padrino的模型,后者的字段是json,它被本地存储?像:

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

我看到,我可以创建一个单独的收集和MyModel通过_id参考,但在现阶段,我想它存储在它旁边是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的是 “无模式”。更多细节here

+0

我看到CouchDB是无模式的。唯一的问题仍然是:我如何描述移民,例如padrino/rails模型?迁移很可能是独立于ORM的,我想保留它。 – mudasobwa 2014-11-09 07:37:50

+0

Padrino使用[CouchRest ORM](https://github.com/couchrest/couchrest)与CouchDB交谈。你想要做的就是铸造。请参阅模型属性中的[CouchRest - Property Arrays]部分(http://www.couchrest.info/model/properties.html)。另请参阅[CouchRest_ExtendDocument](https://github.com/couchrest/couchrest_extended_document#general)文档。所以要回答你的问题,模型/迁移将是'property:properties,[String]' – Besto 2014-11-09 16:45:05

+1

谢谢,它回答了这个问题。 – mudasobwa 2014-11-09 17:07:29