我是Ruby on Rails和Web开发的初学者。我正在上一门在线课程并且一直没有参加讲座。
我的问题是我的courses_controller,索引操作。
Controller:my_first_app / controllers / courses_controller.rb
class CoursesController < ApplicationController
def index
@search_term = 'jhu'
@courses = Coursera.for(@search_term)
end
end
型号:my_first_app / models / coursera.rb
class Coursera
include HTTParty
#default_options.update(verify: false) # Turn off SSL verification
base_uri 'https://api.coursera.org/api/catalog.v1/courses'
default_params fields: "smallIcon,shortDescription", q: "search"
format :json
def self.for term
get("", query: { query: term})["elements"]
end
end
查看:my_first_app / views / index.html.erb
<h1>Search for - <%= @search_term %> </h1>
<table border = "1">
<tr>
<th>Image</th>
<th>Name</th>
<th>Description</th>
</tr>
<%= @courses.each do |course| %>
<tr>
<td><%= image_tag(course["smallIcon"]) %></td>
<td><%= course["name"] %></td>
<td><%= course["shortDescription"] %> </td>
</tr>
<% end %>
路线:my_first_app / config / routes.rb
Rails.application.routes.draw do
get 'courses/index'
get 'greeter/hello'
get 'greeter/goodbye'
end
的Gemfile:
source 'https://rubygems.org'
gem 'rails', '4.2.3'
gem 'sqlite3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'httparty', '0.13.5'
end
我将最后一个gem添加到Gemfile并运行bundle,然后我控制+ c停止并重新启动服务器并收到错误消息:
JSON::ParserError in CoursesController#index
我认为这是说我解析HTML而不是JSON,但我不知道如何解决它。任何帮助将不胜感激。 原始存储库:https://github.com/jhu-ep-coursera/fullstack-course1-module3
答案 0 :(得分:0)
根据Coursera的API documentation,您的base_uri
似乎可能需要:
base_uri 'https://api.coursera.org/api/courses.v1'
然后fields
中的default_params
应该(可能)为:
default_params fields: "photoUrl,description", q: "search"
(同时在您的应用中更改了'smallIcon'
和'shortDescription'
与'photoUrl'
和'description'
的其他匹配项,因为我在这些字段中看不到这些字段api docs)。
完成这些更改后,您应该最终转到返回有效JSON的https://api.coursera.org/api/courses.v1?q=search&query=ruby&fields=photoUrl,description等网址。您当前使用的base_uri
会将您发送到HTML错误页面,告诉您未找到操作。由于这是一个HTML页面,JSON无法解析它。
如果你查看你链接的Github存储库中最后一次提交的日期,那么最后一次提交是在2015年11月,所以差不多2年前。只是超级过时,API从那时起可能已经改变了很多。