2017-07-16 16 views
0

これは明らかに一般的なエラーです。しかし、私はこの問題を解決することはできません私のコードを渡す。 ProPublicaの議会用APIにアクセスしようとしています。私のモデル、ビュー、コントローラはかなり簡単で、この正確なコードはGoogle News APIにアクセスするときに私と協力してくれました。未定義のメソッド `each 'for nil:RailsでAPIを使用する場合のNilClass

JSONレスポンスを反復処理するために私のビューで ".each"メソッドを使用しようとすると、未定義のメソッドエラーが発生します。私はそれが要求するAPIに適切なヘッダーを渡していると思います。

マイモデル:

class CongressTracker < ApplicationRecord 
    include HTTParty 

    def self.response 
    #congress = "most recent congress" 
    #chamber = "one each for congress and senate" 
    #type = "introduced, passed, etc." 

    congress_url = "https://api.propublica.org/congress/v1/115/senate/bills/passed.json" 

    HTTParty.get(congress_url, 
     :headers => { 
     "X-API-KEY" => "api-key-here" 
     }) 
    end 
end 


class Bill < ApplicationRecord 
    include HTTParty 
end 

マイコントローラ:

class BillsController < ApplicationController 
    def index 
    @response = CongressTracker.response 
    end 
end 

マイビュー:

<% @response["results"].each do |bill| %> 
 
     <p><%= bill["title"]%></p> 
 
     <p><%= bill["summary"]%></p> 
 
    <% end %>

マイルート:

resources :bills 

詳細にエラー:(Iは、端末で動作するように取得することができます)期待されるJSONレスポンスの

Rendering bills/index.html.erb within layouts/application 
    Rendered bills/index.html.erb within layouts/application (2.0ms) 
Completed 500 Internal Server Error in 312ms (ActiveRecord: 0.0ms) 

ActionView::Template::Error (undefined method `each' for nil:NilClass): 
    1: <% @response["results"].each do |bill| %> 
    2:  <p><%= bill["title"]%></p> 
    3:  <p><%= bill["summary"]%></p> 
    4: <% end %> 

app/views/bills/index.html.erb:1:in `_app_views_bills_index_html_erb__2110131784793159686_70138696839360' 

例:

{ 
    "status":"OK", 
    "copyright":"Copyright (c) 2017 Pro Publica Inc. All Rights Reserved.", 
    "results":[ 
     { 
     "congress": "115", 
     "chamber": "Senate", 
     "num_results": "20", 
     "offset": "0", 
     "bills": [ 
       { 
       "bill_id": "hr2825-115", 
       "bill_type": "hr", 
       "number": "H.R.2825", 
       "bill_uri": "https://api.propublica.org/congress/v1/115/bills/hr2825.json", 
       "title": "DHS Authorization Act of 2017", 
       "summary": "", 
       }, 
+0

を、あなたはそれを解析する必要はありませんか? –

+0

HTTPartyにはJSONを解析する独自の方法があると思います。この正確なコードは、私も使っているGoogle News APIと連携しているので、JSONレスポンスの解析に関する問題ではないと思います。 –

+0

あなたが試してみることができることは、ビューに '<%= debug @response%>'を投げて、レスポンス構造を検証することです。それがオフの場合、変更された内容や、そこから期待しています。 –

答えて

1

あなたがundefined method 'each' for nil:NilClassを得ている理由APIキーが正しくないため、応答が{"message"=>"Forbidden"}である可能性が最も高いです。

コードをテストしたところ、正しいAPIキーを持っている限り、すべて正常に動作します。

あなたはまだあなたの結果を持っていない可能性が高いので、あなたのビューでいくつかの間違いがあります。

タイトルと法案の概要あなたはこのような何かが必要になります取得するには: `@のresponse`の内容は何

<% @response["results"].each do |result| %> 
    <% result["bills"].each do |bill| %> 
    <p><%= bill["title"]%></p> 
    <p><%= bill["summary"]%></p> 
    <% end %> 
<% end %> 
+0

私は私の鍵をもう一度チェックし、私の意見を変えます。ありがとうございました!これは私に数時間休止されています。 –

+0

私はこれを昨日の回答としてマークしましたが、今日までテストして確認することはできませんでした。確かに正解でした。誤って間違ったAPIキーを使用しました。再度、感謝します! –

関連する問題