我是编码和编码的新手。我正在使用ruby on rails在线课程。我跟着讲座并记录了所有内容,但我得到了#34; NonMethod"错误。这是我在文件中的内容
控制器
class CoursesController < ApplicationController
def index
@search_term = 'jhu'
@courses = Coursera.for(@search_term)
end
end
模型
class Coursera
include HTTParty
base_uri 'https://api.coursera.org/api/catalog.v1/courses'
default_params fields: "smallIcon,shortDescription", q: "search"
format :[enter image description here][1]json
def self.for term
get("", query: { query: term})["elements"]
end
end
观看次数
<h1>Searching for - <%= @search_term %></h1>
<table border="1">
<tr>
<th>Image</th>
<th>Name</th>
<th>Description</th>
</tr>
<% @courses.each do |course| %>
<tr class=<%= cycle('even', 'odd') %>>
<td><%= image_tag(course["smallIcon"])%></td>
<td><%= course["name"] %></td>
<td><%= course["shortDescription"] %></td>
</tr>
<% end %>
</table>
这些是我得到的消息
课程#index中的NoMethodError 显示/Users/Dohe/my_app/app/views/courses/index.html.erb第11行提出:
未定义的方法`每个&#39;为零:NilClass
能帮助我解决我做错的事吗 Ruby 2.2.9和Rails 4.2.3
答案 0 :(得分:0)
正如Subash在评论中所说,@courses
是零,这意味着:
get("", query: { query: term})["elements"]
正在返回nil
。因此,当您尝试@courses.each
时,您会收到NoMethod
错误。
如果您希望:
get("", query: { query: term})["elements"]
不是nil
,那么你必须调试它。您可以向我们展示您的控制台日志,我们也许能够为您提供帮助。
另外,为了防范NoMethod
错误,您可以执行:
def self.for term
get("", query: { query: term})["elements"] || []
end
这实际上说,“如果get("", query: { query: term})["elements"]
为nil
”,则返回一个空数组。这将解决您的错误,但可能会掩盖您可能遇到的其他问题。所以,请谨慎行事。
答案 1 :(得分:0)
检查控制器中包含@courses
的内容,并在视图中将<% end %>
更改为<% end if @courses.present? %>
,它只是确保只尝试遍历@courses
并填充它在视图中是否实际包含任何数据,如果它是nil
,那么nil
没有为其定义的每个方法,所以你得到了
undefined method `each' for nil:NilClass