Вложенный JSON в активную запись - PullRequest
3 голосов
/ 11 января 2012

Через 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 Ответ

3 голосов
/ 11 января 2012

Вы всегда можете сериализовать хеш, а затем сохранить любые дополнительные столбцы из данных, которые вам, возможно, потребуется запросить.

В процессе миграции вы добавите поле в виде его текста.

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...