定义方法

时间:2018-03-16 03:47:23

标签: ruby-on-rails

我是编码和编码的新手。我正在使用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

2 个答案:

答案 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