未定义的方法`每个'为nil:NilClass ...为什么?

时间:2013-12-25 15:14:43

标签: ruby-on-rails undefined

rails指南示例,单击按钮保存帖子,控制台显示此消息:

  

在2013-12-25 22:42:04 +0800开始发布“/ posts”127001   由PostsController处理#create as HTML参数:   {“utf8”=>“✓”,“authenticity_token”=>“CLalUww3gqnSlED0AWdou6P / U2qya   vPqDiBANQOuYgA =“,”post“=> {”title“=>”11“,”text“=>”22“},   “commit”=>“保存帖子”}(0.0ms)开始交易(0.0ms)   回滚事务重定向到http:// 127001:3000 / posts   完成302发现在16ms(ActiveRecord:0.0ms)

     

在2013-12-25 22:42:04 +0800开始获取127001的“/ posts”   由PostsController处理#index为HTML呈现   布局/应用程序中的posts / index.html.erb(15.6ms)已完成500   31ms内部服务器错误

     

ActionView :: Template :: Error(未定义的方法`each'for   零:NilClass):

        <th>Text</th>
        </tr>
        <% @posts.each do |post| %>
     

=============================================== =======

路线是正确的,为什么帖子是零? rails 4.0.2 ruby​​ 2.0

3 个答案:

答案 0 :(得分:28)

在您的帖子控制器中,您需要定义@posts,这是基于您没有的错误。

# app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end 

由于@posts未定义,因此调用each将为nil:NilClass`生成undefined method每个'。

答案 1 :(得分:9)

要在遇到此错误时详细说明

  undefined method `each' for nil:NilClass

这个错误明显地抱怨你在这里调用了每个方法(@posts),这是零。这意味着您尚未在控制器中定义它。由于你没有定义它,这就是它为nil类抱怨未定义方法的原因。

请确保从视图中调用实例变量时进行检查?您必须在控制器中定义可在视图中访问的内容。

如果您在控制器中调用私有方法,有时您也会收到此错误。

答案 2 :(得分:0)

尝试替换此:

<% @posts.each do |post| %>

使用

<% Post.all.each do |post| %>