未定义的方法`每个' for nil:NilClass - 但仅限于在主页上呈现时

时间:2017-02-14 13:59:27

标签: ruby-on-rails ruby

我有一个模型Person,我想列出所有'人物'在我的网站的主页上。

我为此创建了一个部分_index.html.erb,因此我可以在我的网站上随处使用此列表。在index.html.erb上,我渲染了这个部分。

现在http://localhost:3000/people/http://localhost:3000/people/index都运行正常。但是,我还想在我的主页上使用索引partial。在那里,它给出以下错误:

  

未定义的方法`每个'为零:NilClass

我的代码的某些部分:

人/ _index.html.erb

<h2>The following people exist:</h2>
<table>
  <tr>
    <th>Name</th>
  </tr>
  <% @people.each do |p| %>
      <tr>
        <td><%= p.name %></td>
      </tr>
  <% end %>
</table>

人/ index.html.erb

<%= render 'people/index' %>

pages / index.html.erb(这是我的主页)

<h1>Homepage</h1>

<%= render 'people/new' %>
<%= render 'people/index' %>

routes.rb中:

Rails.application.routes.draw do
  root 'pages#index'
  get 'pages/index'
  get 'people/index'
  resources :people
end

部分people_controller.rb:

class PeopleController < ApplicationController

  def index
    @people = Person.all
  end

  def show
    @person = Person.find(person_params)
  end

...

不知何故,如果我发表评论<%= render 'people/index' %>,渲染人/新(也是部分)的工作完全正常。

搜索此错误主要导致解决方案&#34;您没有在控制器中正确定义@people&#34;。但是,为什么它在/ people / index页面上正常工作,而不是在主页上呈现时呢?这是路由问题吗?

我希望我的问题很明确,并且我发布了足够的代码段,感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在呈现主页时点击PagesController路线时调用的pages/index未定义@people,因此@people最终成为nil @people = People.all,并发生错误。

您需要在PagesController的某处添加PeopleController,因为访问主页时development.log实际上并未被调用。

如果您检查PeopleController,则会在访问主页和people/_index部分呈现时看到var navbar_top = $(document).height(); 未被调用。

答案 1 :(得分:0)

undefined method 'each' for nil:NilClass表示您正在呼叫每个人认为存在的东西,但事实并非如此。在这种情况下,你的呼叫@people.each,但@people实际上是零。所以你看到了那个错误。在您的控制器中设置{/ 1}}实际为该页面提供动力的操作/方法。因此,如果您在显示页面上,它将进入show方法。在编辑页面上,确保代码在编辑方法中。