我有一个模型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页面上正常工作,而不是在主页上呈现时呢?这是路由问题吗?
我希望我的问题很明确,并且我发布了足够的代码段,感谢您的帮助!
答案 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方法。在编辑页面上,确保代码在编辑方法中。