これは明らかに一般的なエラーです。しかし、私はこの問題を解決することはできません私のコードを渡す。 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": "",
},
を、あなたはそれを解析する必要はありませんか? –
HTTPartyにはJSONを解析する独自の方法があると思います。この正確なコードは、私も使っているGoogle News APIと連携しているので、JSONレスポンスの解析に関する問題ではないと思います。 –
あなたが試してみることができることは、ビューに '<%= debug @response%>'を投げて、レスポンス構造を検証することです。それがオフの場合、変更された内容や、そこから期待しています。 –