2017-02-19 3 views
0

Ich bin ein Rails Newb, aber es zu lieben .... Wie auch immer, ich habe ein Problem und kann nicht finden, was ich suche, wie die meisten Dinge bereits gefragt sind mit einem ActiveRecord-Objekt usw., und ich verwende JSON.parse tatsächlich von einem Rest-Webservice.Iterating durch JSON.Parse() Ergebnisse in Schienen

Ich kann nicht durch das Objekt ohne Fehler oder leere Zeilen in meiner Tabelle (in der Ansicht) durchlaufen. Ich weiß, was ich in der Ansicht Code habe ist falsch, aber ich habe viele verschiedene Dinge, die ich gelesen habe

Was soll ich in der Ansicht oder muss ich konvertieren, um einen anderen Datentyp vor dem Senden an eine Sicht? Jede Hilfe, die Sie geben können, würde ich wirklich schätzen.

Dank

Controller-Code:

class WidgetController < ApplicationController 
    def index 
    widget = Widget.new 
    @widgets = widget.fetchAll 
    end 
end 

Model Code:

class Widget < ActiveRecord::Base 
# class Widget 
    require 'net/http' 
    require 'json' 
    def fetchAll 
    uri = URI.parse("https://example.com/widgets") 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    request = Net::HTTP::Get.new(uri.request_uri) 
    response = http.request(request) 
    return JSON.parse(response.body) 
    end 
end 

Code anzeigen:

<% @widgets.each do |widget| -%> 
    <tr> 
    <td><%= puts "#{widget['id']}" %></td> 
    <td><%= widget[:name] %></td> 
    <td><%= widget.description %></td> 
    </tr> 
<% end -%> 
+0

Wie sieht der JSON von https://example.com/widgets aus? Ist es ein Array? Detailliertes Layout? –

+0

Danke Franklin, ich habe es herausgefunden: '<% = widget ['id']%>' hat geklappt, ich habe mit den 'puts' festgestellt, dass es auf der Konsole ausgedruckt wurde, schwöre ich habe es versucht! – Chad

+0

Ja, und ich denke du kommst von PHP Hintergrund. In Rails "puts" in Vorlage druckt es im Serverprotokoll statt auf der Webseite. –

Antwort

0

Das url "https://example.com/widgets" eine Antwort einen Fehler enthält, zurückgibt. In Schienen sieht das Response-Objekt wie folgt aus:

#<Net::HTTPNotFound 404 Not Found readbody=true> 

Wenn Sie genau hinsehen, können Sie einen 404 Not Found Fehler in dort sehen. Sie können die Ausgabe der Antwort Objekt wie folgt:

... 
... 
response = http.request(request) 
puts "*" * 20 
p response 
puts "-" * 20 

dann in dem Fenster sehen, wo Sie Ihre Server gestartet:

... 
... 
Started GET "https://stackoverflow.com/users/index" for 127.0.0.1 at 2017-02-18 20:57:16 -0700 
Processing by UsersController#index as HTML 
******************** 
#<Net::HTTPNotFound 404 Not Found readbody=true> 
-------------------- 
... 
... 

Oder Sie etwas mit möglicherweise freundlichem Ausgang, wie die curl command auf dem beschäftigen können Befehlszeile:

~$ curl -v "https://example.com/widgets" 
* Trying 93.184.216.34... 
* Connected to example.com (93.184.216.34) port 443 (#0) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 
* Server certificate: www.example.org 
* Server certificate: DigiCert SHA2 High Assurance Server CA 
* Server certificate: DigiCert High Assurance EV Root CA 

> GET /widgets HTTP/1.1 
> Host: example.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
< HTTP/1.1 404 Not Found 
< Cache-Control: max-age=604800 
< Content-Type: text/html 
< Date: Sun, 19 Feb 2017 03:59:57 GMT 
< Expires: Sun, 26 Feb 2017 03:59:57 GMT 
< Last-Modified: Mon, 13 Feb 2017 
... 
... 

(-v steht für die ausführliche, die Ausgänge sowohl die gesendeten Header der Anforderung sowie die empfangene Kopf ers mit der Antwort. Ohne die Option -v werden die Header in der Ausgabe ausgelassen.)

Die rechte Seite > ist der Text der Anfrage. Die linke Seite < ist der Text der Antwort. Beachten Sie den 404 nicht gefunden-Status in der ersten Zeile der Antwort.