2015-02-19 5 views
1

Новизна к отображению Rails и очень хотелось бы получить помощь от этого из сообщества переполнения стека.Отображение ответа JSON на модель

В настоящее время у меня есть ответ JSON от API Embedly и не знаю, как сопоставить его с моей очень простой моделью сообщений. Я пытаюсь получить image/title/url из ответа JSON и сопоставить его в моей базе данных в соответствующих полях, поэтому в ответе JSON ниже это будет «original_url», «image» и «title».

{ 
    "provider_url": "http://piccsy.com", 
    "authors": [], 
    "provider_display": "piccsy.com", 
    "related": [], 
    "favicon_url": "http://piccsy.com/favicon.ico", 
    "keywords": [], 
    "app_links": [], 
    "original_url": "http://piccsy.com/2015/02/rihanna-sharks-harpers-bazaar-march-2015-photoshoot3", 
    "media": {}, 
    "content": null, 
    "entities": [], 
    "provider_name": "Piccsy", 
    "type": "html", 
    "description": "Beautiful, inspirational and creative images from Piccsy. Thousands of Piccs from all our streams, for you to browse, enjoy and share with a friend.", 
    "embeds": [], 
    "images": [ 
     { 
      "width": 728, 
      "url": "http://img2.piccsy.com/cache/images/56/8f/bed__396d8_cecf850824130_99f-post.jpg", 
      "height": 1092, 
      "caption": null, 
      "colors": [ 
       { 
        "color": [ 
         190, 
         211, 
         212 
        ], 
        "weight": 0.3095703125 
       }, 
       { 
        "color": [ 
         114, 
         159, 
         171 
        ], 
        "weight": 0.247314453125 
       }, 
       { 
        "color": [ 
         0, 
         52, 
         68 
        ], 
        "weight": 0.244140625 
       }, 
       { 
        "color": [ 
         25, 
         99, 
         117 
        ], 
        "weight": 0.198974609375 
       } 
      ], 
      "entropy": 5.94797179868, 
      "size": 318918 
     }, 
     { 
      "width": 200, 
      "url": "http://piccsy.com/piccsy/images/layout/logo/e02f43.200x200.jpg", 
      "height": 200, 
      "caption": null, 
      "colors": [ 
       { 
        "color": [ 
         215, 
         51, 
         67 
        ], 
        "weight": 0.701904296875 
       }, 
       { 
        "color": [ 
         250, 
         252, 
         252 
        ], 
        "weight": 0.298095703125 
       } 
      ], 
      "entropy": 0.686638083774, 
      "size": 18691 
     } 
    ], 
    "safe": true, 
    "offset": null, 
    "cache_age": 86065, 
    "lead": null, 
    "language": null, 
    "url": "http://piccsy.com/2015/02/rihanna-sharks-harpers-bazaar-march-2015-photoshoot3", 
    "title": "Rihanna-sharks-harpers-bazaar-march-2015-photoshoot3", 
    "favicon_colors": [ 
     { 
      "color": [ 
       208, 
       37, 
       38 
      ], 
      "weight": 0.000244140625 
     }, 
     { 
      "color": [ 
       0, 
       0, 
       0 
      ], 
      "weight": 0.000244140625 
     } 
    ], 
    "published": null 
} 

Моя модель сообщений содержит очень простые названия, поля url и изображения, которые все принимают строки. Любая помощь при сопоставлении этого с моделью была бы блестящей, до сих пор я делал очень простые ответы JSON, и это немного из моей лиги.

Спасибо за ваше время.

ответ

1

Вы можете просто разобрать JSON ответ, и получить необходимые поля из него

json_response = '{your json response from api}' 
response_hash = JSON.parse(json_response) 
MyModel.create!(url: response_hash[:original_url], title: response_hash[:title]) 

Но есть проблема с изображениями, ответ содержит несколько изображений, так что, вероятно, вы должны иметь ImageModel, что принадлежит к MyModel и MyModel has_many ImageModels.

Тогда вы можете сделать:

model = MyModel.create!(url: response_hash[:original_url], title: response_hash[:title]) 
response_hash[:images].each do |image| 
    model.images.create!(url: image[:url]) 
end