在Padrino CouchDB模型中存储json对象

时间:2014-11-01 09:51:35

标签: ruby-on-rails ruby json couchdb padrino

我目前正在使用Padrino后端处理CouchDB应用程序。除了一些通用字符串之外,我还需要一个存储json的模型。该模型看起来像(伪代码):

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

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

padrino g model MyModel name:string, properties:string

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

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

我发现我可以创建一个单独的集合,并_idMyModel引用它,但目前我想将它与name一起存储。可能吗?

1 个答案:

答案 0 :(得分: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