通过JSON.Parse()迭代导致rails

时间:2017-02-19 03:12:51

标签: ruby-on-rails json ruby

我是一个新手,但很喜欢它......无论如何,我遇到了一个问题而且似乎无法找到我正在寻找的东西,因为大多数已经问到的东西都是ActiveRecord对象,等等,我实际上正在使用来自其他Web服务的JSON.parse。

我不能在没有错误的情况下遍历对象或在我的表中(在视图中)显示空白行。我知道我在视图代码中的内容是错误的,但我尝试了很多不同的东西我已经阅读

我应该在视图中做什么,或者在发送到视图之前是否需要转换为其他数据类型?你能给予任何帮助,我真的很感激。

由于

控制器代码:

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

型号代码:

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

查看代码:

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

1 个答案:

答案 0 :(得分:0)

该网址"https://example.com/widgets"返回包含错误的响应。在rails中,响应对象如下所示:

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

如果仔细观察,可以看到404 Not Found错误。您可以输出响应对象,如下所示:

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

然后查看启动服务器的窗口:

...
...
Started GET "/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>
--------------------
...
...

或者,您可以使用可能更友好的输出,例如命令行上的curl command

~$ 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代表详细,它输出带有请求的已发送标头以及带响应的接收标头。如果没有-v选项,输出中将省略标题。)

面向>的右侧是请求的文本。左侧<是响应的文本。请注意响应第一行中的404 Not Found状态。