2012-01-11 4 views
3

Через API я получаю ответ JSON ниже со списком серверов.Вложенный 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"=>[]}, 
+0

ActiveResource ваш друг – apneadiving

+0

правый , но как лучше всего настроить мои модели для прохождения в этом json? На этой странице есть хорошая информация, но мне не нужны несколько записей. http://www.rogue-development.com/blog2/2009/05/creating-nested-objects-with-json-in-rails/ – pablo

ответ

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]) 
Смежные вопросы