2016-10-12 6 views
0

このjson APIの出力をデータベースに保存するにはどうすればよいですか?このjson APIの出力をデータベースに保存するにはどうすればよいですか?

JSON出力は、このようなものです:

[{"id"=>758426, 
    "email"=>"[email protected]", 
    "created_at"=>"2014-09-23T16:23:56Z", 
    "updated_at"=>"2014-09-23T16:23:58Z", 
    "status"=>"Customer", 
    "custom_status"=>nil, 
    "first_name"=>"Name", 
    "last_name"=>"Name", 
    "latest_visitor"=> 
    {"id"=>13940436, "tracking_code"=>"f29a780c-615a-41df-a2b1-72e5af2c466b"}, 
    "url"=>{"id"=>2452457, "url"=>"http://www.website.com/#_l_1a"}, 
    "referrer"=>nil, 
    "affiliate"=>{"id"=>35521, "email"=>"[email protected]"}, 
    "campaign"=>nil, 
    "search_term"=>nil, 
    "tracking_code"=>"f29a780c-615a-41df-a2b1-72e5af2c466b"}, 
{"id"=>758845, 
    "email"=>"[email protected]", 
    "created_at"=>"2014-09-23T19:27:53Z", 
    "updated_at"=>"2016-03-31T19:42:17Z", 
    "status"=>"Cancelled", 
    "custom_status"=>"", 
    "first_name"=>"Name", 
    "last_name"=>"Name", 
    "latest_visitor"=> 
    {"id"=>14302036, "tracking_code"=>"d61e4f25-59ac-4e9a-b818-d5bc4ad73d62"}, 
    "url"=>nil, 
    "referrer"=>nil, 
    "affiliate"=>{"id"=>35579, "email"=>"[email protected]"}, 
    "campaign"=>nil, 
    "search_term"=>nil, 
    "tracking_code"=>"d61e4f25-59ac-4e9a-b818-d5bc4ad73d62"}] 

私の問題は、に含まれるオブジェクトを参照するために返された配列のために名前がないということですので、私はフィールドをつかむために使用するのか分かりませんそれらを保存します。このラインである

lib/dyno.rb:30:in `block in <top (required)>': undefined method `[]' for nil:NilClass (NoMethodError) 
    from lib/dyno.rb:21:in `each' 
    from lib/dyno.rb:21:in `<top (required)>' 

:あなたの例のハッシュでreferrer_id: item['referrer']['id'],

+0

ハッシュを返したのは何ですか? 2つの要素を持つ配列があり、それぞれがハッシュです。他の配列と同様に、その要素にアクセスすることができます。 'arr [0]'、 'arr [1]'など、または 'arr.each'など。キーがモデルの属性名と一致していて、Railsを使用している場合は、 'create'に直接渡すことができます。 'MyModel.create(arr)'を実行すると、2つのレコードが作成されます。 –

+0

申し訳ありませんが、私はアレイと言っていました。配列に名前を付けるだけでいいですか?私は現在、値を保存しようとしているコードで質問を更新しました。 – NeyLive

+1

このコードは正確には動作しません。 – infused

答えて

0

を、search_termがある。これは誤りである

endpoint = 'https://api.leaddyno.com/v1/leads' 
    ## API key 
    request = {:params => {:key => Rails.application.secrets.LEADDYNO_PRIVATE, page: 1}} 
    ## Parse JSON 
    response = JSON.parse(RestClient.get endpoint, request) 

    response.each do |item| 
    LeaddynoLead.create(
     leaddyno_lead_id: item['id'], 
     email: item['email'], 
     first_name: item['first_name'], 
     last_name: item['last_name'], 
     latest_visitor_id: item['latest_visitor']['id'], 
     latest_visitor_code: item['latest_visitor']['tracking_code'], 
     url: item['url']['url'], 
     referrer_id: item['referrer']['id'], 
     referrer_url: item['referrer']['url'], 
     leaddyno_affiliate_id: item['affiliate']['id'], 
     leaddyno_affiliate_email: item['affiliate']['email'], 
     search_term: item['search_term']['term'], 
     search_engine: item['search_term']['search_engine'], 
     leaddyno_tracking_code: item['tracking_code'], 
     created_at: item['created_at'], 
     updated_at: item['updated_at'] 
    ) 
     sleep 0.5 
    end 

次のようにデータを保存する

私の試みがありますnilなので、この行は失敗します。

search_term: item['search_term']['term'] 

あなたはとitem['search_term']ことはnilを防ぐことができます:あなたは、ハッシュ内の他の値と同様の問題を有していてもよく

search_term: item.fetch('search_term', {}).fetch('term', nil) 

+0

私はこれを正しく理解しているかどうかを見てみましょう。用語が値の場合は値がフェッチされますが、nilならフェッチされません。正しい? – NeyLive

+0

問題のある値を変更しましたが、 'undefined method 'fetch' for nil:NilClass(NoMethodError)' – NeyLive

関連する問題