Il s'agit manifestement d'une erreur courante. Cependant, je suis incapable de résoudre ce problème en passant en revue mon code. J'essaie d'accéder à l'API de ProPublica pour le congrès. Mon modèle, ma vue et mon contrôleur sont assez simples et ce code exact a fonctionné avec moi lors de l'accès à l'API Google Actualités.Méthode non définie `each 'pour Nil: NilClass lors de l'utilisation de l'API dans Rails
Je continue d'obtenir une erreur de méthode non définie lorsque j'essaie d'utiliser la méthode ".each" dans ma vue pour parcourir la réponse JSON. Je crois que je passe les en-têtes appropriés à l'API comme il le demande.
Mes modèles:
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
Mon contrôleur:
class BillsController < ApplicationController
def index
@response = CongressTracker.response
end
end
Mon point de vue:
<% @response["results"].each do |bill| %>
<p><%= bill["title"]%></p>
<p><%= bill["summary"]%></p>
<% end %>
Mon itinéraire:
resources :bills
L'erreur en détail:
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'
Exemple de réponse JSON attendu (que je peux aller travailler dans le terminal):
{
"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": "",
},
Quel est le contenu de '@ response', avez-vous pas l'analyser? –
Je crois que HTTParty a sa propre façon d'analyser JSON. Ce code exact fonctionne avec l'API Google Actualités que j'utilise également, donc je ne pense pas que ce soit un problème d'analyse de la réponse JSON. –
Une chose que vous pouvez essayer est de lancer un '<% = debug @response%>' dans la vue et de vérifier la structure de réponse et à partir de là si elle est éteinte, vous pourrez peut-être savoir ce qui a changé ou pourquoi Re attente à partir de là –