嵌套JSON到活动记录

时间:2012-01-11 00:16:16

标签: ruby-on-rails json activerecord model

通过API,我将获得下面的JSON响应以及服务器列表。

由于这有嵌套的JSON数据,创建模型和存储这些数据的最佳方法是什么?

我想用这些数据做的就是存储它(现在)。如果ipaddresses或lb_applications被夷为平地,请不要关心,列出的内容永远不会超过1个。

{"ips"=>[{"address"=>"127.9.34.6"}],
  "memory"=>8589934592,
  "id"=>"79ahvoahvo9h8apdjaidfjeijowfj",
  "storage"=>107374182400,
  "location_id"=>"hdfajhlnf4jaf23wf3f33fwoifjsijfsij",
  "hostname"=>"my.server.name.com",
  "description"=>"8 GB RAM + 100 GB Disk",
  "cpu"=>4.0,
  "status"=>"running",
  "lb_applications"=>
   [{"lb_application_name"=>"Staging",
     "lb_application_id"=>"2ohuro2lufp92epf9dpe0ijpdijfps9udhfp9"}]},
 {"ips"=>[{"address"=>"127.99.6.75"}],
  "memory"=>4294967296,
  "id"=>"ufho923ehufp9idf0i3jef0ijd32ddd2",
  "storage"=>53687091200,
  "location_id"=>"93fj8j93jf9hj39fh93h9g3hrg9",
  "hostname"=>"my.server2.name.com",
  "description"=>"",
  "cpu"=>2.0,
  "status"=>"running",
  "lb_applications"=>[]},

1 个答案:

答案 0 :(得分:3)

您始终可以序列化哈希值,然后存储您可能需要查询的数据中的任何额外列。

在迁移中,您将添加字段,如文本。

add_column :my_models, :my_hash, :text, :limit => 16000000 #only add the limit bit if the hash is exceptionally long
add_column :my_models, :other_data, :string

在模型的顶部你应该:

class MyModel < ActiveRecord::Base
  serialize :my_hash, Hash

然后在创建模型时你需要做的就是:

hash = {:rawr => "Lion"}
MyModel.create(:my_hash=>hash, :other_data=>hash[:rawr])